如何通过java从文件中删除数据?
我想用java读一个文件。然后,我想在不重新写入文件的情况下删除该文件中的一行
我该怎么做
有人建议我在RandomAccessFile的帮助下读取/写入文件,而不必重新写入文件How to write data to a file through java?
具体来说,该文件包含行。一行包含三个字段-id、名称和职业-用\t分隔。我希望通过读取器或InputStream或任何其他方式读取该文件,然后搜索具有指定关键字(例如121)的行,然后删除整行
需要在不重新写入整个文件的情况下执行此操作
# 1 楼答案
下面的代码搜索单个文本文件中的一行或多个字段,逐行读取文件 然后,行或字段可以替换为“”或任何其他字符串。这里我们使用模式和匹配器类
如果这不能解决你的问题,请告诉我
导入java。木卫一; 导入java。util。正则表达式; 导入java。util。性质; 公共类删除线 {
公共静态void main(字符串[]args) { BufferedReader br=null; 尝试 { 字符串行=null; 文件f=新文件(“d:/xyz.txt”)
); br=新的BufferedReader(新的文件读取器(“d:/giri/scjp/”)
} br=新的BufferedReader(新的文件读取器(“d:/xyz.txt”); 字符串行=null
}
}
}
# 2 楼答案
在行中添加一个标记,说明行是否被删除:这将使软件删除而不是硬件删除
如果必须插入新行,则可以重用标记为已删除的行
# 3 楼答案
我认为,在不写入文件系统(包括删除一行)的情况下,无法以任何方式更改文件系统上的文件
您的意思是希望在不改变文件元数据的情况下编写文件,就像上次修改时一样
根据您的最新问题:
我认为你不能做你在这里要求做的事。一旦文件被写入,就不能从文件中删除字节,请注意RandomAccessFile中没有deleteByte或removeByte方法
我建议将文件内容移动到一个数据库中,这样就可以进行这种面向记录的操作
另一种选择是,您必须重写该文件。对不起
# 4 楼答案
“行”是一个抽象概念——它们只是以“\n”结尾的任意字节序列
BufferedWriters
及其同类文件不支持以这种方式进行文本编辑,因此您必须重写整个文件一般来说,您要做的是:
append == false
打开一个FileWriter
FileWriter