1

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

我怎样才能做到这一点?

有人建议我在 RandomAccessFile 的帮助下读/写文件而不重写文件。如何通过java将数据写入文件?

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

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

4

4 回答 4

4

我不认为您可以在不写入文件的情况下以任何方式更改文件系统上的文件,包括删除一行。

你的意思是你想在不改变文件元数据的情况下写入文件,比如上次修改时间?


根据您更新的问题:

我认为你不能在这里做你要求做的事情。一旦文件被写入,您就无法从文件中删除字节,请注意RandomAccessFile中没有 deleteByte 或 removeByte 方法。

我建议将文件的内容移动到允许这种面向记录的操作的数据库中。

另一种方法是,您必须重写文件。对不起!

于 2009-12-31T09:46:31.237 回答
2

“行”是一个抽象概念——它们只是以“\n”结尾的任意字节序列。BufferedWriters并且他们的同类不支持以这种方式进行文本编辑,因此您必须完全重写文件。

一般来说,你想要做的是:

  • 打开阅读器
  • 将内容读入一些合适的数据结构
  • 关闭阅读器
  • 更改此数据结构中需要更改的数据/记录
  • 打开FileWriter一个append == false
  • 将数据结构的内容写入结果文件
  • FileWriter
于 2009-12-31T09:48:16.523 回答
0

在您的行中添加一个标记,说明您的行是否被删除:这将使软件删除而不是硬件删除。

如果必须插入新行,则可以重用那些标记为已删除的行。

于 2009-12-31T10:21:28.500 回答
-1

下面的代码搜索单个文本文件中的行或字段,逐行读取文件,然后可以将行或字段替换为“”或任何其他字符串。这里我们使用模式和匹配器类。

如果这不能解决您的问题,请告诉我。

导入 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();
}

}

}

于 2009-12-31T11:01:31.287 回答