FileWriter问题
我通过Ajax发送内容到服务器端服务器端接受后想写入文件但是不知道为什么当数据稍微大点时不能完全写入只能写如一部分,我把代码发出来请高手帮我看看客户端:varxmlHTT...
我通过Ajax发送内容到服务器端 服务器端接受后想写入文件 但是不知道为什么当数据稍微大点时不能完全写入只能写如一部分, 我把代码发出来请高手帮我看看
客户端:
var xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");
try {
xmlHTTP.open("POST",g_GlobalInfo.WebRoot+"oss/wf/template/public/jsp/save.jsp?filePath="+filePath,false);
xmlHTTP.send(vHtml);
if(200 == xmlHTTP.status || 0 == xmlHTTP.status) {
alert(xmlHTTP.responseText);
return true;
}
}
catch(e) {
return false;
}
服务器端:
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<%@ page import="java.io.*"%>
<%
BufferedReader in = request.getReader();
String filePath=request.getParameter("filePath");
//oss/wf/template/test.html
String line;
String realPath = config.getServletContext().getRealPath(filePath);
File f=new File(realPath);
FileWriter fw=new FileWriter(realPath);
BufferedWriter bw=new BufferedWriter(fw);
try
{
while((line= in.readLine())!= null)
{
// out.println(line);
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
fw.close();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
out.println("Mission Completed");
}
%> 展开
客户端:
var xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");
try {
xmlHTTP.open("POST",g_GlobalInfo.WebRoot+"oss/wf/template/public/jsp/save.jsp?filePath="+filePath,false);
xmlHTTP.send(vHtml);
if(200 == xmlHTTP.status || 0 == xmlHTTP.status) {
alert(xmlHTTP.responseText);
return true;
}
}
catch(e) {
return false;
}
服务器端:
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<%@ page import="java.io.*"%>
<%
BufferedReader in = request.getReader();
String filePath=request.getParameter("filePath");
//oss/wf/template/test.html
String line;
String realPath = config.getServletContext().getRealPath(filePath);
File f=new File(realPath);
FileWriter fw=new FileWriter(realPath);
BufferedWriter bw=new BufferedWriter(fw);
try
{
while((line= in.readLine())!= null)
{
// out.println(line);
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
fw.close();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
out.println("Mission Completed");
}
%> 展开
6个回答
展开全部
大家都是善意的,本身没有错,但是问题的关键不在这,你用ajax去提交,然后你想获得一个返回结果,但是你忽略了ajax提交会有一个时效性,也就是说你在进行文件操作的时候,超时了,这里不是指session超时,是提交超时.你服务器端的代码我没有看,因为没有必要.ajax上传本身就有很多漏洞,建议用普通上传,查询再用ajax查询
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上的同学,怎么会超时!?ajax请求就是独立的一个线程你等在那里,怎么会超时,我做过一个基于ajax的b/s聊天,实现和楼主差不多,不过我们的聊天数据量不大
楼主可能是缓冲区太小的缘故,不过你每次都flush了啊,只能活马当死马医了,BufferedWriter bw=new BufferedWriter(fw,8096);设置一个缓冲区大小为8096看看楼主,还可以适当的调大 ,再试试吧其他确实也没有看出什么问题
楼主可能是缓冲区太小的缘故,不过你每次都flush了啊,只能活马当死马医了,BufferedWriter bw=new BufferedWriter(fw,8096);设置一个缓冲区大小为8096看看楼主,还可以适当的调大 ,再试试吧其他确实也没有看出什么问题
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你对I/O流的操作还没完全掌握,可以考我这个修改一下代码。
还有问题可以再补充。
import java.io.*;
public class Test {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new FileReader("c:/test.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("c:/b.txt"));
String line = br.readLine();
while(line != null) {
bw.write(line + "\r\n");
System.out.println(line);
line = br.readLine();
}
bw.close();
br.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
还有问题可以再补充。
import java.io.*;
public class Test {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new FileReader("c:/test.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("c:/b.txt"));
String line = br.readLine();
while(line != null) {
bw.write(line + "\r\n");
System.out.println(line);
line = br.readLine();
}
bw.close();
br.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为在in的缓冲区里面还有数据,关闭之前请对in.flush.先关闭in,在关闭Writer
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
按照字节读,不会出现这个问题,代码大致如下:
buffer = new byte[iBuffSize];
input = new BufferedInputStream(new FileInputStream(logFile));
while ((bufferSize = input.read(buffer)) != -1) {
output.write(buffer, 0, bufferSize);
}
output.flush();
buffer = new byte[iBuffSize];
input = new BufferedInputStream(new FileInputStream(logFile));
while ((bufferSize = input.read(buffer)) != -1) {
output.write(buffer, 0, bufferSize);
}
output.flush();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询