我正在尝试编写一个读取文件(这是一个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)?如果是这样,我该怎么做?
为什么读取更大的actualInputFile并正确地输出数据这样的问题,当一切正常的smallInputFile? 有人能帮忙吗?
答案 0 :(得分: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();
}
}
}
}
答案 1 :(得分:0)
这应该作为评论,但我没有代表。在文档中,它有写入方法和打印方法。你尝试过使用write()吗?
我怀疑它是文件的大小,可能是你正在测试的两个文件之间是.txt,另一个是.java
编辑:可能是对这两个人的第二个建议。首先是我在文档中注意到的事情。答案 2 :(得分:0)
PrintWriter
的方法不会抛出异常。调用将刷新流的checkError()
方法,并在发生错误时返回true。处理较大文件时很可能发生错误,例如编码错误。
答案 3 :(得分:0)
检查你的程序。当文件为空时,表示您的程序在完成程序之前不关闭PrintWriter。 例如,您可能会在程序的一部分中返回一个导致该结果的Spreadsheet.close();没有被运行。