2011-11-04 57 views
0
// 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)); 
    } 

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

回答

0

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

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

那么,什么是解决方案。

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

变体:你可以使用RandomAccessFile API。你也可以使用FileChannel。