gpt4 book ai didi

Java删除或修改File中的一条记录

转载 作者:行者123 更新时间:2023-12-01 05:37:08 25 4
gpt4 key购买 nike

// Create file 
FileWriter fstream = new FileWriter(fileName, true);
BufferedWriter out = new BufferedWriter(fstream);
out.write(c.toString());
//Close the output stream
out.close();

// Code I used to read record I am using | as a seperator name and id
String fileName = folderPath + "listCatalogue.txt";
String line = "";
Scanner scanner;
String name, id;
scanner = new Scanner(fileName);
System.out.println(scanner.hasNextLine());
while (scanner.hasNextLine()) {
line = scanner.nextLine();
System.out.println(line);
StringTokenizer st = new StringTokenizer(line, "|");
name = st.nextToken();
id = st.nextToken();
catalogues.add(new Catalogue(name, id));
}

上面是创建文件和读取文件的代码,我怎样才能删除某些记录,在文件中,我从谷歌找到的是删除文件但不删除某些记录示例我提供名称,如果匹配则删除该记录。以及修改该记录?是否可以使用文件修改记录?

最佳答案

由于多种原因,删除文件中的某些记录是不可能的。

首先,记录是您的应用程序级别术语。文件系统只知道字节序列。您用来访问文件的第二个流是也不支持删除的抽象。

那么,解决方案是什么。

  1. 您可以逐条记录读取文件并逐条记录写入其他文件,除非您看到要删除的记录。避免将此记录写入其他文件。这会给你删除的效果。但这种方法对于大文件不太有效。
  2. 文件流支持 mark()skip() 方法。如果您的数据结构允许检索要删除的记录的位置,您可以通过调用 skip() 立即到达该位置。问题是删除。要解决这个问题,您应该创建允许将记录标记为已删除的数据结构。在这种情况下,您并没有真正删除记录,只是将其标记为已删除。其他解决方案是在记录上写入特殊(例如空)值,但您的读者必须能够跳过此类空值。这个解决方案有一个缺点:如果删除很多记录,文件不会变小。

变体:您可以使用 RandomAccessFile API。您还可以使用 FileChannel。

关于Java删除或修改File中的一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8005215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com