我无法将所有数据写入文件

时间:2014-05-27 17:09:03

标签: java file-io

我编写了Java代码,用于从一个文件中读取并写入新文件。我正在阅读的文件有5000行记录,但是当我写入新文件时,我只能写入4700-4900条记录。

我想可能是我同时从文件中读取并写入文件,这可能会造成问题。

我的代码如下:

从文件中读取:

public String readFile(){
    String fileName = "/home/anand/Desktop/index.txt";
    FileReader file = null;  
    try {
        file = new FileReader(fileName);
        BufferedReader reader = new BufferedReader(file);
        String line = "";
        while ((line = reader.readLine()) != null) {
            line.replaceAll("ids", "");
            System.out.println(line);
            returnValue += line + "\n";
        }
        return returnValue;
    } catch (Exception e) {
        throw new RuntimeException(e);
    } finally {
        if (file != null) {
            try {
                file.close();
            } catch (IOException e) {
                // Ignore issues during closing 
            }
        }
    }
}

写入文件:

public void writeFile(String returnValue){
    String newreturnValue = returnValue.replaceAll("[^0-9,]", "");      
    String delimiter = ",";
    String newtext ="";
    String[] temp;
    temp = newreturnValue.split(delimiter);
    FileWriter output = null;
    try {
        output = new FileWriter("/home/anand/Desktop/newinput.txt");
        BufferedWriter writer = new BufferedWriter(output);
        for(int i =0; i < temp.length ; i++){
            writer.write("["+i+"] "+temp[i]);
            writer.newLine();
        }
    } catch (Exception e) {
        throw new RuntimeException(e);
    } finally {
        if (output != null) {
            try {
                output.close();
            } catch (IOException e) {
                // Ignore issues during closing
            }
        }
    }
}

我需要有关如何同时读取和写入文件的建议。

2 个答案:

答案 0 :(得分:3)

您需要关闭writer而不是outputBufferedWriter可能没有写出所有的行,因为你永远不会关闭它。

答案 1 :(得分:0)

您必须关闭编写器对象。最后几行可能还没有刷新到文本文件中。

此外,您是否了解Java 7中引入的try-with-resource?您可以通过利用它来压缩代码:

 public String readFile(){
      String fileName = "/home/anand/Desktop/index.txt";

      try(BufferedReader reader = new BufferedReader(new FileReader(filename)) {

        String line = "";
        while ((line = reader.readLine()) != null) {
               line.replaceAll("ids", "");
               System.out.println(line);
               returnValue += line + "\n";
             }
        return returnValue;
      } catch (Exception e) {
          throw new RuntimeException(e);
      }
    }

通过执行此操作,无论是否抛出异常,Java都会在try块完成后自动为您关闭reader对象。这使您更容易阅读代码:)