如何通过java从文件中删除数据?

时间:2009-12-31 09:42:52

标签: java java-io

我想在java中读取一个文件。然后,我想删除该文件中的一行而不重写该文件。

我该怎么做?

有人建议我在没有使用RandomAccessFile帮助重写文件的情况下读/写文件。 How to write data to a file through java?

具体来说,该文件包含行。一行包含三个字段 - id,name和profession - 由\ t分隔。我想通过Reader或InputStream或任何其他方式读取该文件,然后搜索具有指定关键字(例如121)的行,然后想要删除整行。

需要在不重写整个文件的情况下执行此操作

4 个答案:

答案 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();
}

}

}