2011-11-04 83 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。