这个是jsp页面的代码 里面的注释说明了我情况 再次感谢大家Ftpdownload fd = new Ftpdownload();
File file = fd.doDownload();//这里通过ftp客户端取得服务器端的一个文件
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");//我想解除下乱码
//我不知道以下的这个头设置是否合适,但是那2个字“中文”总是乱码 我页面pageEncoding="UTF-8"
response.addHeader("Content-Disposition","attachment;filename=" + "中文" + file.getName());
//我把文件的大小算出来 目的想想在后面的测试
long l = file.length();
String s = String.valueOf(l);
int j = Integer.parseInt(s);
//构建输入输出流
OutputStream outputStream = response.getOutputStream();
InputStream inputStream = new FileInputStream(file);
//byte[] buffer = new byte[j]; //我若直接用文件的大小做缓冲 那么若文件很大将java heap 溢出
byte[] buffer = new byte[1024];
//我若以某个量作为缓存,奇怪的现象发生了,他将重复从ftp服务器那里取得文件加入缓存
//重复次数为 文件大小除以1024
int i = -1;
while ((i = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, i);
}
outputStream.flush();
outputStream.close();
inputStream.close();
outputStream = null;
} catch (Exception e) {
} finally {
out.clear();
out = pageContext.pushBody();
}
File file = fd.doDownload();//这里通过ftp客户端取得服务器端的一个文件
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");//我想解除下乱码
//我不知道以下的这个头设置是否合适,但是那2个字“中文”总是乱码 我页面pageEncoding="UTF-8"
response.addHeader("Content-Disposition","attachment;filename=" + "中文" + file.getName());
//我把文件的大小算出来 目的想想在后面的测试
long l = file.length();
String s = String.valueOf(l);
int j = Integer.parseInt(s);
//构建输入输出流
OutputStream outputStream = response.getOutputStream();
InputStream inputStream = new FileInputStream(file);
//byte[] buffer = new byte[j]; //我若直接用文件的大小做缓冲 那么若文件很大将java heap 溢出
byte[] buffer = new byte[1024];
//我若以某个量作为缓存,奇怪的现象发生了,他将重复从ftp服务器那里取得文件加入缓存
//重复次数为 文件大小除以1024
int i = -1;
while ((i = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, i);
}
outputStream.flush();
outputStream.close();
inputStream.close();
outputStream = null;
} catch (Exception e) {
} finally {
out.clear();
out = pageContext.pushBody();
}
页面pageEncoding也要改成GBK
long l = file.length();
String s = String.valueOf(l);
int j = Integer.parseInt(s); 计算文件大小这么写肯定是不对的,即使这么计算也应该是file.getSize();但是这个方法好像也是不对的。file.available() 好像是计算文件大小 可以试一下
BufferedOutputStream output=new BufferedOutputStream(response.getOutputStream());
改用缓冲流吧!!-----------------------
输入到缓冲流里然后
response.flushBuffer();而不是流outputStream.flush();
----------------------------------------------------
原因:没有采用缓冲流,流压缩会造成数据不全吧!
中文写成这样--new String("中文".getBytes()," ISO8859-1");
response.addHeader("Content-Disposition","attachment;filename=" + new String("中文".getBytes()," ISO8859-1") + file.getName());