繁体   English   中英

在Java的特定点将内容写入文本文件

[英]Writing something to a text file at a specific point Java

所以我想在文本文件中的特定位置编写一个字符串。 应该很容易,但这是我第一次使用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。 我将如何跳至所需的位置并编写toAdd?

提前致谢

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM