Servlets 下载文件Servlet-文件内容包含二进制文件

Servlets 下载文件Servlet-文件内容包含二进制文件,servlets,download,Servlets,Download,我曾尝试开发一个servlet,允许用户下载文件,但它允许用户下载文件,但文件内容包含二进制垃圾,不可读。我可以知道原因吗 代码 它与以二进制或文本模式或浏览器设置写入文件有关 请帮忙 谢谢 问题不在目前给出的代码中。您正确地使用了输入流/输出流而不是读卡器/编写器来流式处理文件 问题的原因很可能是您创建/保存文件的方式。当您使用读卡器和/或写卡器时,此问题会显现出来,该读卡器未被指示对正在读/写的字符使用正确的字符编码。也许你正在创建一个上传/下载服务,而错误就在上传过程本身 假设数据为UTF

我曾尝试开发一个servlet,允许用户下载文件,但它允许用户下载文件,但文件内容包含二进制垃圾,不可读。我可以知道原因吗

代码

它与以二进制或文本模式或浏览器设置写入文件有关

请帮忙


谢谢

问题不在目前给出的代码中。您正确地使用了
输入流
/
输出流
而不是
读卡器
/
编写器
来流式处理文件

问题的原因很可能是您创建/保存文件的方式。当您使用
读卡器
和/或
写卡器
时,此问题会显现出来,该读卡器未被指示对正在读/写的字符使用正确的字符编码。也许你正在创建一个上传/下载服务,而错误就在上传过程本身

假设数据为UTF-8格式,您应该按如下方式创建读卡器:

Reader reader = new InputStreamReader(new FileInputStream(file), "UTF-8"));
Writer writer = new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
作者如下:

Reader reader = new InputStreamReader(new FileInputStream(file), "UTF-8"));
Writer writer = new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
但是,如果您实际上不需要按每个字符操作流,而只是想不经修改地传输数据,那么您实际上应该一直使用
InputStream
/
OutputStream

另见:

原始文件是否可读?有什么问题吗?您的代码看起来不错,只是不需要设置内容长度。