在特定点Java将文本文件写入文本文件

时间:2014-03-03 19:54:22

标签: java file text bufferedreader bufferedwriter

所以我想在文本文件中的特定点写一个String。应该很容易,但这是我第一次使用BufferedWriter类。我的来源如下:

public static String readFile(String fileName) throws IOException {
    String toReturn = "";
    BufferedReader br = null;

    try {
        String sCurrentLine;
        br = new BufferedReader(new FileReader("test.txt"));
        while ((sCurrentLine = br.readLine()) != null) {
            toReturn = toReturn+"\n"+sCurrentLine;
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (br != null)br.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    return toReturn;
}

public static void addAfter(String toAdd, char after, String fileName) throws IOException {
    String file = readFile(fileName);
    int length = file.length();
    char[] chr = file.toCharArray();
    boolean pos[] = new boolean[length];
    for(int i = 0; i < length; i++) {
        if(chr[i] == after) {
            pos[i] = true;
        }
    }

    BufferedWriter out = new BufferedWriter(new FileWriter(fileName, true));
}

我想使用BufferedWriter类在位置i添加String toAdd。我将如何跳到所需的位置并写入Add?

提前致谢

2 个答案:

答案 0 :(得分:0)

一种方法是将整个文本文件读入内存,修改/替换要插入的行,然后将字符串写回文本文件,覆盖源文件。

一种更安全的方法是改为写入第二个文件,然后在保存输出时,删除源文件并将输出文件重命名为源文件的名称。如果由于某种原因写入进程抛出异常,这将防止破坏数据。

答案 1 :(得分:0)

正如CodeChimp在对您的问题的评论中指出的那样,插入后的所有文本都必须重写到文件中。因此,您最好的解决方案是打开一个新的临时文件,读取原始文件并将文本复制到新文件直到插入点,将新文本写入新文件,复制旧文件的其余部分,关闭这两个文件,删除原始文件,并重命名新文件。或者,将原始文件重命名为临时文件名,使用要修改的文件的原始名称创建新的空文件,执行与上面相同的复制和插入过程,然后删除重命名的原始文件。您选择的两个选项中的哪一个将取决于错误处理以及是否将使用锁来控制并发访问。