使用Java中的PrintWriter创建文件,并写入该文件

时间:2013-08-15 16:30:18

标签: java file file-io stream printwriter

我正在尝试编写一个读取文件(这是一个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? 有人能帮忙吗?

4 个答案:

答案 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();没有被运行。