我尝试在txt文件中搜索字符串并在其上面插入一些特定内容。
可悲的是,输出看起来与我的预期完全不同。
有人可以给我一个暗示吗?
这是我有多远!
String description= "filename.txt";
String comparison=" return model;";
RandomAccessFile output = null;
try
{
output = new RandomAccessFile(description, "rw" );
String line = null;
while ((line = output.readLine()) != null) {
if (line.equals(comparison)){
//System.out.println("alt: "+line);
output.seek(output.getFilePointer()-line.getBytes().length);
output.writeChars("new stuff; \n");
//System.out.println("new: "+output.readLine());
}
}
}
catch ( IOException e ) {
e.printStackTrace();
}
finally {
if ( output != null ){ try { output.close(); } catch ( IOException e ) { e.printStackTrace(); }}
}
这是我尝试阅读的文件:
/*filename.txt*/
some longer content ~ 100kB
return model;
further content
这是我希望得到的
/*filename.txt*/
some longer content ~ 100kB
new stuff;
return model;
further content
答案 0 :(得分:2)
文件不支持插入或删除内容,但文件末尾除外。 (这不是Java的限制,而是操作系统)
要插入文本,您必须重新编写文件(至少从您想要更改的位置)最简单的解决方案是将内容复制到临时文件,根据需要更改/插入或删除,并替换原始文件这是成功的。
答案 1 :(得分:1)
使用两个文件。复制到您想要的行到新文件。添加新行。然后再将其余行复制到文件中。最后,将新文件的全部内容复制到旧文件
答案 2 :(得分:0)
首先:您正在测试的字符串中有空格:
String comparison=" return model;";
比较像这样的行是更好的主意:
if (line.trim().equals(comparison.trim())){ ...
对trim()
的调用将删除行中的所有空格/制表符和比较字符串,因此如果某些文件使用制表符而不是空格或不同数量的空格,它也会匹配...