0

晚上好,今天我在使用 Print Writer 将文件上传到服务器时遇到了一个奇怪的情况,文件被传输了,我尝试FileOutPutStream改用它并解决了问题,我的问题是为什么PrintWriter会出现这种奇怪的行为,这是我的代码用于上传文件并将其保存在服务器上:

public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException{
int i;
if(request instanceof MultipartWrapper){

String DestinationPath="C:\\";
MultipartWrapper request1=(MultipartWrapper)request;
File f=request1.getFile("photo");
java.io.FileInputStream fis=new java.io.FileInputStream(f);
//PrintWriter out=new PrintWriter(DestinationPath+f.getName()); causes the problem mentioned above  
java.io.FileOutputStream out=new java.io.FileOutputStream(DestinationPath+f.getName());
while((i=fis.read())!=-1){
out.write(i);
}
fis.close();
out.close();


}

}
4

2 回答 2

3

您需要了解 Writers 和 OutputStreams 之间的区别。 PrintWriter.write(int)正在写一个字符,而FileOutputStream.write(int)正在写一个字节。您不小心将字节转换为字符,这会损坏您的文件。一般来说,当只是复制流时,你想坚持字节。

于 2013-02-12T15:14:10.877 回答
1

PrintWriter将使用默认编码创建一个 Writer,而 FileOutputStream 将简单地写出原始字节。如果您的原始内容和服务器端使用相同的编码,您将不会遇到写入字节和重新解释它们的问题。但是,当您使用 时,会使用PrintWriter默认系统编码,这可能会破坏您的数据。

于 2013-02-12T15:15:36.047 回答