2017-03-07 127 views
1

我希望能夠從java目錄中讀取文件,而不必擔心出現內存不足異常,因爲files.listfiles()files.list()只能保存這麼多。我也想知道是否有辦法將文件的偏移量存儲在目錄中,以便我可以存儲該數字,而不必再次遍歷目錄以查找它,這可能嗎?讀取java目錄中的文件並將其偏移量存儲在目錄中

現在我使用Jaime Hablutzel的另一個問題的答案來通過該目錄,但想知道我是否可以將文件偏移量存儲在目錄中以便下次直接進入它。

我的想法是將文件名存儲在一個文本文件中,然後存儲一個計數以記錄字符數,直到遇到的每一個新行都是另一個文件名,然後使用RandomAccessFile seek()方法將目錄從該行保存的計數。

How to list 2 million files in a directory in java

回答

1

好吧,我解決什麼我想做我的問題。我通過將每個文件名的長度加1並將其添加到偏移量然後將其寫入文件,爲存儲在文本文件中的每個文件創建一個偏移量。

public static void readOffsets() 
{ 
    try { 
     File file = new File("indexFile.txt"); 
     FileReader fr = new FileReader(file); 
     BufferedReader br = new BufferedReader(fr); 

     FileWriter fw = new FileWriter("indexFile2.txt"); 
     PrintWriter pw = new PrintWriter(fw); 

     String line; 
     int offset = 0; 
     pw.write(offset + "\n"); 
     while((line = br.readLine()) != null) 
     { 
      int length = line.length(); 
      offset += length + 1; 
      pw.write(offset + "\n"); 

     } 
     pw.close(); 
     br.close(); 
    } 
    catch(IOException ioe) 
    { 
     ioe.printStackTrace(); 
    } 
} 

然後在尋求使用RandomAccessFile的偏移我會得到正確的文件名。

public static void seekOffset() 
{ 
    try { 
     RandomAccessFile file = new RandomAccessFile("IndexFile.txt", "r"); 
     file.seek(693); 
     System.out.println(file.readLine()); 
    } 
    catch(IOException ioe) 
     { 

     } 
} 
相關問題