1

我正在尝试编写一个程序来读取文件(这是一个 Java 源文件),从该文件中创建一个包含某些指定值的 Arraylist。并将该 Arraylist 输出到另一个结果文件中。

我正在使用 PrintWriter 来制作新的结果文件。这是我的程序的摘要版本:

 ArrayList<String> exampleArrayList = new ArrayList<String>();
 File actualInputFile = new File("C:/Desktop/example.java");

 PrintWriter resultingSpreadsheet= new PrintWriter("C:/Desktop/SpreadsheetValues.txt", "UTF-8");

 FileReader fr = new FileReader(actualInputFile);
 BufferedReader br = new BufferedReader(fr);
 String line=null;

 while ((line = br.readLine()) != null) {
 // code that makes ArrayList
 }

 for (int i = 0; i < exampleArrayList.size(); i++) {
      resultingSpreadsheet.println(exampleArrayList.get(i));
 }
 resultingSpreadsheet.close();

问题是当我运行它时,没有任何东西打印到结果电子表格中。它完全是空的。

但是,当我替换时,该程序可以完美运行(这意味着它将所有内容正确打印到生成的电子表格文件中):

 File actualInputFile = new File("C:/Desktop/example.java"); 

这是我想要作为输入文件的文件,大小为 481 KB,其中:

 File smallerInputFile = new File("C:/Desktop/smallerExample.txt"); 

这实际上只是 .java 源文件的一个较小的 .txt 示例版本,大小为 1.08 KB。

我尝试了一些方法,包括刷新 PrintWriter、将其包装在 FileWriter 周围、将 .java 文件中的所有代码复制粘贴到文本文件中,以防出现扩展问题,但这些似乎不起作用。我开始认为这一定是因为 PrintWriter 制作的文件的大小,但这很可能不是问题所在。也许我需要把所有东西都放在一个流中(就像这里所说的:http: //docs.oracle.com/javase/6/docs/api/java/io/PrintWriter.html)?如果是这样,我该怎么做?

当较小的InputFile一切正常时,为什么读取较大的actualInputFile并正确输出其数据是一个问题?有人能帮忙吗?

4

4 回答 4

1

在写入 excel 表时检查异常,因为我真的不认为这是大小问题。下面是成功执行的示例代码,文件大小约为 1 MB。

public class Test {

/**
 * @param args
 */
public static void main(String[] args) {
    BufferedReader br = null;

    try {

        String sCurrentLine;

        br = new BufferedReader(new FileReader("D:\\AdminController.java"));

        while ((sCurrentLine = br.readLine()) != null) {
            System.out.println(sCurrentLine);
        }

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (br != null)br.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

}

}
于 2013-08-15T17:29:51.987 回答
0

检查你的程序。当文件为空时,意味着您的程序在完成程序之前没有关闭 PrintWriter。例如,您可能在程序的一部分中有返回,这会导致结果Spreadsheet.close(); 没有被运行。

于 2014-09-11T02:00:32.960 回答
0

这应该作为评论,但我没有代表。在文档中,它同时具有 write 方法和 print 方法。您是否尝试过使用 write() 代替?

我怀疑这是文件的大小,它可能在您正在测试的两个文件之间,一个是.txt,另一个是.java

编辑:可能是两者的第二个建议。首先是我在文档中注意到的。

于 2013-08-15T16:52:01.467 回答
0

PrintWriter不抛出异常的方法。调用checkError()将刷新流的方法,如果发生错误则返回 true。处理较大的文件很可能发生错误,例如编码错误。

于 2013-08-15T17:04:13.423 回答