如何在java中的文本文件中添加新行

时间:2014-03-18 14:55:38

标签: java

我必须在java中修改一个文本文件。 例如,这是修改前的文件

line
line
line 
line
line 
line

之后应该看起来像:

line
line
this is another 
line
line
line
line

所以不要写任何东西,只在2.和3.行之间添加一行,而原来的3.行将是新的4.行。

一种方法是制作一个临时文件,写入其中的每一行,以及我想要修改的地方。比原来delet,并重命名临时文件。或者读取临时文件并将其写入te原始文件。 但有没有办法在java中使用相同的类来读取和修改我想要的文件? THX!

2 个答案:

答案 0 :(得分:1)

您可以同时在Java中读取和修改文件。您遇到的问题是,您需要在此处插入数据,以便在需要将新行重新排列后再扩展文件的长度后执行所有操作。

根据您尝试做的具体内容和原因,有多种方法可以执行此操作,最简单的方法是扫描将文件复制到新位置并随时插入新值。如果你需要进行编辑,虽然它更复杂,但基本上你做同样的事情:将X字符读取到缓冲区,用新数据覆盖文件中的X字符,读取下一个X字符。覆盖第一个缓冲区中刚刚读取的字符。重复直到EOF。

答案 1 :(得分:0)

将磁盘上的文件视为数组 - 如果要将某些项插入数组的中间,则需要将所有项都移位以腾出空间。

唯一安全的方法是创建一个新的临时文件,逐行复制旧文件,然后重命名,就像你建议的那样。通过直接在磁盘上更新相同的文件,如果出现任何问题,您可能会丢失数据,并且会占用大量内存。

试试这个:

public void writeAfterNthLine(String filename, String text, int lineno) throws IOException{
    File file = new File(filename); 
    File temp = File.createTempFile("temp-file-name", ".tmp");
    BufferedReader br = new BufferedReader(new FileReader( file ));
    PrintWriter pw =  new PrintWriter(new FileWriter( temp ));
    String line;
    int lineCount = 0;
    while ((line = br.readLine()) != null) {
        pw.println(line);
        if(lineCount==lineno){
            pw.println(text);
        }
        lineCount++;
    }
    br.close();
    pw.close();
    file.delete();
    temp.renameTo(file);
}

代码未经过测试,但应该可以使用,您可以通过多次验证和异常处理来改进代码