帮我看看这段java下载代码,文件名为中文时,报错,无法找到指定文件
1个回答
展开全部
代码一共6句,前4句没问题,运行下载是ok的,
最后一句有点不明白,为什么用BufferedInputStream?这个是读文件的,不知道你后面是如何写的,难道还要把文件读到内存?在向客户端发送出去??这样的话下载GB级文件内存溢出。
BufferedInputStream和BufferedOutputStream 用了之后,一定要flush(),这样也许会解决你的中文下载报错。
我直接用BufferedOutputStream 下载文件成功,前面是用你的,后面如下:
InputStream in = new FileInputStream(file);// 将文件装换成缓冲流
OutputStream out = response.getOutputStream(); // 获取response中得下载对象
BufferedOutputStream bufo = new BufferedOutputStream(out); // 对象转换成字符流
int length = 0; // 读取本地文时,记录本次文件读取内容大小
byte[] buffer = new byte[524288]; // 每次推送 512KB
while ((length = in.read(buffer)) != -1) // 读取本地文件,并在存放在buffer 数组
{
bufo.write(buffer, 0, length);// 预备向客户端推送
bufo.flush();// 清空缓存,并立即推送
}
in.close();
out.close();
bufo.close();
不建议写 response.setContentLength(int); 大并发时,这个容易出问题。
最后一句有点不明白,为什么用BufferedInputStream?这个是读文件的,不知道你后面是如何写的,难道还要把文件读到内存?在向客户端发送出去??这样的话下载GB级文件内存溢出。
BufferedInputStream和BufferedOutputStream 用了之后,一定要flush(),这样也许会解决你的中文下载报错。
我直接用BufferedOutputStream 下载文件成功,前面是用你的,后面如下:
InputStream in = new FileInputStream(file);// 将文件装换成缓冲流
OutputStream out = response.getOutputStream(); // 获取response中得下载对象
BufferedOutputStream bufo = new BufferedOutputStream(out); // 对象转换成字符流
int length = 0; // 读取本地文时,记录本次文件读取内容大小
byte[] buffer = new byte[524288]; // 每次推送 512KB
while ((length = in.read(buffer)) != -1) // 读取本地文件,并在存放在buffer 数组
{
bufo.write(buffer, 0, length);// 预备向客户端推送
bufo.flush();// 清空缓存,并立即推送
}
in.close();
out.close();
bufo.close();
不建议写 response.setContentLength(int); 大并发时,这个容易出问题。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询