2012-03-21 101 views
1

我有一個文件夾中檢索多個對象的編碼,解串,並將其添加到字符串數組循環從層次結構的不同文件夾中讀取多個文件

public static String[] play(){ 
    int i = 0; 
    List<String> args = new ArrayList<String>(); 
     while (true) { 
     try { 
      args.add(processFile(i)); 
      System.out.println(i); 
      i++; 
     } 
     catch (Exception e) { 
      System.out.println("No more files"); 
      break; 
     } 
     } 
     String[] array = args.toArray(new String[0]); 
     return array; 
}  
private static String processFile(int fileNumber) throws Exception { 
    File file=new File("E:/proj/"+fileNumber+".bin"); 
    FileInputStream fin=new FileInputStream("E:/proj/"+fileNumber+".bin"); 

    //reading the byte content of the bin files 
    byte fileContent[] = new byte[(int)file.length()]; 
    fin.read(fileContent); 

    //store the deserialized object that is returned to an object. 
    Object obj=serializer.toObject(fileContent); 

    //converting the obtained object to string and storing it to args, a string[] 
    String word=obj.toString(); 
    return word; 
} 

}

這示例代碼,檢索打開此層次結構後面的「秒」文件夾的消息。 TIMESTAMP CHART這個文件夾最後可以看到。序列化的bin文件的存儲是這樣的,一秒鐘內創建的bin文件的數量存儲在該「秒」文件夾中。也就是說,如果在17:15:32 pm創建了一個bin,bin文件將被存儲在2012年 - > 3月 - > 21日期 - > 17小時 - > 15分鐘 - > 32秒的文件夾下 - > 1個或更多的bin文件,取決於在那一秒創建了多少個bin文件。

如果我必須從這個層次結構中正常檢索bin文件,我可以成功地爲用戶輸入時間。但是如果給定時間間隔,比如說從17:15:35到17:20:35檢索所有的bin文件,那麼我將不得不返回在15分35秒,15分36秒得到的所有bin文件。 ...第16分鐘第1秒等等,直到35秒20分鐘;從而完全準確地完成5分鐘的時間窗口並檢索該間隔中的所有bin文件。此外,不必每秒發佈一個bin文件,因爲它可能發生在第二次或一分鐘內,沒有創建bin文件,因此第二個/分鐘文件夾不存在於層次結構中。也就是說,也許是17:18:0到17:19:0,沒有創建bin文件;可能/不可能創建bin文件的一致性。並且bin文件的所有數據都必須存儲在一個字符串數組中。 無論我如何循環它,我無法達到預期的結果,所以我在這裏提出基本代碼。我如何去做呢?請幫助

回答

0

使用您的解決方案,您將創建數十億個文件夾和文件,以存儲String對象。更好地使用數據庫並將字符串和實時時間戳添加到表中,以便在一段時間內輕鬆訪問它們。這個wolud也適合併發用戶訪問。

+0

請問您可以說明一下,因爲我可以使用實時時間戳嗎? – kuki 2012-03-26 05:45:08

0

使用listFiles方法File類可以獲取文件夾中的所有文件和文件夾。然後,您可以按名稱對文件夾列表進行排序。例如,在文件夾15min中,您可能有文件夾09sec15sec55sec

使用(你需要添加前導零的筆記 - 09sec9sec)這個排序列表,你可以輕鬆抓取所有間隔15分鐘02sec正確的子文件夾,以15分鐘33sec:正確的子文件夾09sec15sec。爲了解決這個問題,您可以簡單地在整個文件夾樹中以相同格式使用字符串比較邊界。

相關問題