0

問題がどこにあるのか本当にわかりません。文字をテキストファイルに出力したかったので、printWriterを使用して同じことを行いました。ファイルに「;」が含まれている場合、それを新しい行に置き換えたいのですが、これが私が行っていることです。

public static void downloadFile_txt(String sourceFilePathName, String contentType, String destFileName, HttpServletResponse response) throws IOException, ServletException
 {
     File file = new File(sourceFilePathName);
     //FileInputStream fileIn = new FileInputStream(file);
     FileReader fileIn = new FileReader(file); 
     long fileLen = file.length();
     response.setContentType(contentType);
     response.setContentLength((int)fileLen);

     response.setHeader("Content-Disposition", String.valueOf((new  StringBuffer("attachment;")).append("filename=").append(destFileName)));

     PrintWriter pw =  response.getWriter();


     // Loop to read and write bytes.
     int c=-1;      
     while ((c = fileIn.read()) != -1)
     {

         if(c!=59)
         {
              pw.print((char)c);
         }
         else
         {
              pw.println();
         }
     }
     pw.flush();
     pw=null;        
     fileIn.close();        
}

しかし、私のファイルは最後の文字を除いてすべてを印刷しています。例:input =

:00004000,FFAD,2 Byte Ch;
:0000FFBD,FFBE,2 Byte Ch;
:0000FFBF,FFFF,2 Byte Ch;

私が得ている出力

:00004000,FFAD,2 Byte Ch
:0000FFBD,FFBE,2 Byte Ch
:0000FFBF,FFFF,2 Byte C

最後の「h」が印刷されていません。

前もって感謝します

4

3 に答える 3

3

A.pw.flush();お役に立てるかもしれません。

public class FlushPrintWriter {

    public static void main(String[] args) throws IOException  {
        FileReader fileIn = new FileReader("in.txt");
        FileWriter out = new FileWriter("out.txt");
        PrintWriter pw = new PrintWriter(out);
        int c;        
        while ((c = fileIn.read()) != -1) {
            if(c!=59) {
               pw.print((char)c);
            } else {
               pw.println();
            }
        }
        pw.flush();
    }
}

出力

:00004000,FFAD,2バイトチャンネル

:0000FFBD,FFBE,2バイトCh

:0000FFBF,FFFF,2バイトCh

予想通り。

(あなたIOExceptionの s をこのように扱わないでください - そしてリーダーとライターを閉じてください - これはデモンストレーションのためだけです!)


編集:あなたのコードはコンパイルさえしません(2つの変数はfileIn?)!

今言及しているサーブレット コードを実行しても、問題を再現できません。出力は期待どおりです。だからこれは私があきらめています。final;がソース ファイルにないか、表示されていない処理がアプリでさらに行われているのではないかと疑い始めています。

于 2012-08-21T12:28:34.767 に答える
1

印刷ライターの flush() または close() を試してください。

そして、String.replace() を使用して文字を置き換えて、行ごとに読む方が良いかもしれません

于 2012-08-21T12:30:14.690 に答える
0

while ループをファイル サイズまで実行する

 int fileSize=file.length();
 while(fileSize>0)
 {
    //do your task of reading charcter and printing it or whatever you want
    fileSize--;
 }
于 2012-08-21T12:34:30.370 に答える