我必须在java中修改一个文本文件。 例如,这是修改前的文件
line
line
line
line
line
line
之后应该看起来像:
line
line
this is another
line
line
line
line
所以不要写任何东西,只在2.和3.行之间添加一行,而原来的3.行将是新的4.行。
一种方法是制作一个临时文件,写入其中的每一行,以及我想要修改的地方。比原来delet,并重命名临时文件。或者读取临时文件并将其写入te原始文件。 但有没有办法在java中使用相同的类来读取和修改我想要的文件? THX!
答案 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);
}
代码未经过测试,但应该可以使用,您可以通过多次验证和异常处理来改进代码