2017-09-27 18 views
1

iText Pdf readerを使用してpdfファイルを読みました。その後、私はテキストファイルにコンテンツを保存しようとしています。私は次のコードを使用しています。しかし、ここではコンテンツはファイルに書き込まれていません。ここでは、pdfページ全体を1ページずつ読んでいますが、1ページしか読まない場合は、ファイルに書き込んでいます。なぜこのコードは、指定されたテキストファイルにコンテンツ全体を保存することができません。しかし、このコードはすべてのコンテンツをコンソールに表示します。誰かが私が間違っている場所を助けることができますか?コンテンツをJavaを使用してテキストファイルに保存できません

public class PdfReadExample { 

    public static void main(String[] args) { 
     PdfReader reader; 
     String textFromPage; 
     BufferedWriter bw=null; 
     FileWriter fw=null; 

     try { 
      reader = new PdfReader("pdf location"); 
      int nPages=reader.getNumberOfPages(); 
      System.out.println(nPages); 
      for(int i = 1; i <=n Pages; i++){ 
       textFromPage = PdfTextExtractor.getTextFromPage(reader, i); 
       System.out.println("page" + i + " " + textFromPage); 
       fw = new FileWriter("input.txt", true); 
       bw = new BufferedWriter(fw); 
       bw.write(textFromPage); 

       System.out.println(textFromPage); 
      } 

      reader.close(); 
      bw.close(); 
      fw.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

答えて

5

あなたは、ループ内で新しいFileWriterBufferedWriterを作成しています。ループの最初で唯一の1を作成し、ループ内でそれを使用するので、代わりに

for(int i=1;i<=nPages;i++){ 
    textFromPage = PdfTextExtractor.getTextFromPage(reader, i); 
    System.out.println("page"+i+" "+textFromPage); 
    fw=new FileWriter("input.txt",true); 
    bw=new BufferedWriter(fw); 
    bw.write(textFromPage); 
    System.out.println(textFromPage); 
} 

fw=new FileWriter("input.txt",true); 
bw=new BufferedWriter(fw); 
for(int i=1;i<=nPages;i++){ 
    textFromPage = PdfTextExtractor.getTextFromPage(reader, i); 
    System.out.println("page"+i+" "+textFromPage); 
    bw.write(textFromPage); 
} 

もう一つの側面ノートを行います使用してFileWriterは書くために、システムのエンコーディングを使用するライターを作成しますテキストをファイルに追加します。それはあなたが使いたい文字セットではないかもしれません。 new OutputStreamWriter(FileOutputStream, String)を使用し、明示的に使用する文字セットを指定する方が良いでしょう。

+0

何らかの理由で何らかの理由でループ内に 'FileWriter'と' BufferedWriter'を作成する必要がある場合(私はあなたがなぜ必要なのかはわかりませんが、不可能ではありません)ループ内でそれらを閉じます( 'bw.close()'と 'fw.close()')。 @ Lotharの提案よりも効率が悪くなります。ファイルを繰り返し開いたり閉じたりしているからですが、可能な選択肢です。 – DaveyDaveDave

+0

ご協力ありがとうございます。しかし、私はOutputStreamWriter(FileOutputStream、String)を使用していて、うまく動作しています。 –

+0

@MohammadHasanもし答えが助けられていて、今のところうまくいけば答えを受け入れるかもしれないので、 "開いている質問リスト"から消えます;-) – Lothar

関連する問題