我想用java读取文件。然后,我想从该文件中删除一行而不重写该文件。
我怎样才能做到这一点?
有人建议我在 RandomAccessFile 的帮助下读/写文件而不重写文件。如何通过java将数据写入文件?
具体来说,该文件包含行。一行包含三个字段 - id、名称和职业 - 由 \t 分隔。我想通过 Reader 或 InputStream 或任何其他方式读取该文件,然后搜索具有指定关键字(例如 121)的行,然后想要删除整行。
需要在不重写整个文件的情况下执行此操作
我想用java读取文件。然后,我想从该文件中删除一行而不重写该文件。
我怎样才能做到这一点?
有人建议我在 RandomAccessFile 的帮助下读/写文件而不重写文件。如何通过java将数据写入文件?
具体来说,该文件包含行。一行包含三个字段 - id、名称和职业 - 由 \t 分隔。我想通过 Reader 或 InputStream 或任何其他方式读取该文件,然后搜索具有指定关键字(例如 121)的行,然后想要删除整行。
需要在不重写整个文件的情况下执行此操作
我不认为您可以在不写入文件的情况下以任何方式更改文件系统上的文件,包括删除一行。
你的意思是你想在不改变文件元数据的情况下写入文件,比如上次修改时间?
根据您更新的问题:
我认为你不能在这里做你要求做的事情。一旦文件被写入,您就无法从文件中删除字节,请注意RandomAccessFile中没有 deleteByte 或 removeByte 方法。
我建议将文件的内容移动到允许这种面向记录的操作的数据库中。
另一种方法是,您必须重写文件。对不起!
“行”是一个抽象概念——它们只是以“\n”结尾的任意字节序列。BufferedWriters
并且他们的同类不支持以这种方式进行文本编辑,因此您必须完全重写文件。
一般来说,你想要做的是:
FileWriter
一个append == false
FileWriter
在您的行中添加一个标记,说明您的行是否被删除:这将使软件删除而不是硬件删除。
如果必须插入新行,则可以重用那些标记为已删除的行。
下面的代码搜索单个文本文件中的行或字段,逐行读取文件,然后可以将行或字段替换为“”或任何其他字符串。这里我们使用模式和匹配器类。
如果这不能解决您的问题,请告诉我。
导入 java.io。; 导入 java.util.regex。; 导入 java.util.Properties;公共类删除线{
公共静态无效主(字符串[] args){ BufferedReader br = null; 尝试{字符串行=空;文件 f = new File("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")); 字符串线=空;
}
catch (FileNotFoundException e)
{
System.out.println("File couldnt find");
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}