我想在java中读取一个文件。然后,我想删除该文件中的一行而不重写该文件。
我该怎么做?
有人建议我在没有使用RandomAccessFile帮助重写文件的情况下读/写文件。 How to write data to a file through java?
具体来说,该文件包含行。一行包含三个字段 - id,name和profession - 由\ t分隔。我想通过Reader或InputStream或任何其他方式读取该文件,然后搜索具有指定关键字(例如121)的行,然后想要删除整行。
需要在不重写整个文件的情况下执行此操作
答案 0 :(得分:4)
我认为你不能以任何方式改变文件系统上的文件而不写信息,包括删除一行。
你的意思是你想在不改变文件元数据的情况下编写文件,比如上次修改时间吗?
根据您更新的问题:
我认为你不能做你要求做的事。一旦文件被写入,就无法从文件中删除字节,请注意RandomAccessFile中没有deleteByte或removeByte方法。
我建议将文件内容移动到数据库中 - 这允许这种面向记录的操作。
另一种方法是,你必须重写文件。遗憾!
答案 1 :(得分:2)
“Lines”是一个抽象概念 - 它们只是由“\ n”终止的任意字节序列。 BufferedWriters
及其同类不支持以这种方式进行文本编辑,因此您必须完整地重写该文件。
一般来说,你想要做的是:
FileWriter
append == false
FileWriter
答案 2 :(得分:0)
在你的行中添加一个标记,说明你的行是否被删除:这将删除软件而不是硬件删除。
如果必须插入新行,则可以重复使用标记为已删除的行。
答案 3 :(得分:-1)
以下代码搜索单个文本文件中的一行或多个字段逐行读取文件 然后一行或多个字段可以用“”或任何其他字符串替换。这里我们使用模式和Matcher类。
如果这不能解决您的问题,请告诉我。
import java.io. ; import java.util.regex。; import java.util.Properties; 公共类DeleteLine {
public static void main(String [] args) { BufferedReader br = null; 尝试 { String line = null; 文件f =新文件(“d:/xyz.txt”);
String replaceString=properties.getProperty("replaceAll.String");
br = new BufferedReader(new FileReader(“d:/ giri / scjp /”);
while ( (line = br.readLine()) != null )//BufferedReader contains readline method
{
Pattern p=Pattern.compile(searchString);/*here u an specify the line u want to delete */
Matcher m=p.matcher(line);
line=m.replaceAll(replaceString);/*here replace String u can " " so that it will be emptied */
System.out.println(line);
}
//System.out.println(line);
}
}
} br = new BufferedReader(new FileReader(“d:/xyz.txt”)); String line = null;
}
catch (FileNotFoundException e)
{
System.out.println("File couldnt find");
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}