无法使用java在文本文件中保存内容

时间:2017-09-27 07:51:32

标签: java file itext

我使用iText Pdf阅读器阅读pdf文件。之后我想在文本文件中保存内容。我正在使用以下代码。但这里的内容不是写入文件。在这里,我逐页阅读整个pdf,但如果只读一页则会写入文件。为什么此代码无法在指定的文本文件中保存整个内容。但是,此代码会打印控制台中的所有内容。任何人都可以帮助我,我错了吗?

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();
        }
    }
} 

1 个答案:

答案 0 :(得分:5)

您正在循环中创建新的FileWriterBufferedWriter。在循环开始时只创建一个并在循环内部使用它,而不是

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);
}

DO

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创建一个使用系统编码将文本写入文件的编写器。这可能不是你想要使用的charset。最好使用new OutputStreamWriter(FileOutputStream, String)并指定要明确使用的字符集。