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");
}
%>
展开
 我来答
雪箂
2009-03-11 · TA获得超过502个赞
知道小有建树答主
回答量:471
采纳率:57%
帮助的人:82.1万
展开全部
大家都是善意的,本身没有错,但是问题的关键不在这,你用ajax去提交,然后你想获得一个返回结果,但是你忽略了ajax提交会有一个时效性,也就是说你在进行文件操作的时候,超时了,这里不是指session超时,是提交超时.你服务器端的代码我没有看,因为没有必要.ajax上传本身就有很多漏洞,建议用普通上传,查询再用ajax查询
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
smluyi
2009-03-21 · TA获得超过1356个赞
知道大有可为答主
回答量:515
采纳率:0%
帮助的人:806万
展开全部
楼上的同学,怎么会超时!?ajax请求就是独立的一个线程你等在那里,怎么会超时,我做过一个基于ajax的b/s聊天,实现和楼主差不多,不过我们的聊天数据量不大
楼主可能是缓冲区太小的缘故,不过你每次都flush了啊,只能活马当死马医了,BufferedWriter bw=new BufferedWriter(fw,8096);设置一个缓冲区大小为8096看看楼主,还可以适当的调大 ,再试试吧其他确实也没有看出什么问题
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
储利玉2i
2009-03-09 · TA获得超过1157个赞
知道小有建树答主
回答量:954
采纳率:0%
帮助的人:481万
展开全部
你对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();
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jiest1986
2009-03-10 · TA获得超过3432个赞
知道小有建树答主
回答量:1013
采纳率:0%
帮助的人:1113万
展开全部
因为在in的缓冲区里面还有数据,关闭之前请对in.flush.先关闭in,在关闭Writer
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhoujichao23
2009-03-09 · TA获得超过306个赞
知道小有建树答主
回答量:428
采纳率:0%
帮助的人:299万
展开全部
按照字节读,不会出现这个问题,代码大致如下:
buffer = new byte[iBuffSize];
input = new BufferedInputStream(new FileInputStream(logFile));
while ((bufferSize = input.read(buffer)) != -1) {
output.write(buffer, 0, bufferSize);
}
output.flush();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式