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

Writer と OutputStream の違いを理解する必要があります。 PrintWriter.write(int)文字を書き込んでいますが、 はバイトFileOutputStream.write(int)を書き込んでいます。誤ってバイトを文字に変換していたため、ファイルが破損していました。一般に、ストリームをコピーするだけの場合は、バイトに固執する必要があります。

于 2013-02-12T15:14:10.877 に答える
1

PrintWriterデフォルトのエンコーディングを使用してライターを作成しますが、FileOutputStream は単純に生のバイトを書き出します。元のコンテンツとサーバー側が同じエンコーディングを使用していれば、バイトの書き込みと再解釈に問題はありません。ただし、 を使用するPrintWriterと、デフォルトのシステム エンコーディングが使用され、データが台無しになる可能性があります。

于 2013-02-12T15:15:36.047 に答える