2016-01-13 105 views
1

我想從多個目錄中讀取多個文件。到目前爲止,我的程序只能讀取多個文件,直到某個限制。文件[]無法處理多個文件

public void filesTobeCollected(String validpath) throws Exception { 
    this.folder = new File(validpath); 
    // this.file = new ArrayList<>(); 
    File[] fileEntry = folder.listFiles(); 
    System.out.println("directory path" + fileEntry.length); 

    /*****File upload read****/ 

    for (int i = 0; i < fileEntry.length; i++) { 

     /*this line weeds out other directories/folders*/ 
     if (fileEntry[i].exists()) { 

      file.add(String.valueOf(fileEntry[i])); 
      } 
     } 
    } 

,我通過這個函數發送值目錄,

public List<String> filesTobeTested(ArrayList<String> file) throws 
    Exception { 
    Set<String> test = new HashSet<>(); 
    test.add("src/test/resources/gfd"); 
    test.add("src/test/resources/rds"); 
    test.add("src/test/resources/oiu"); 
    //test.add("src/test/resources/pol"); 

    System.out.println("directory path 2" + test); 

    for (int i = 0; i < 1; i++) { 

     for (Iterator<String> it = test.iterator(); it.hasNext();) { 
      String f = it.next(); 
      filesTobeCollected(f); 
      System.out.println("Found" + f); 
     } 

這裏提交[] FileEntry的似乎有一定的限制,因爲我用推test.add(「SRC /測試/資源多個目錄/ obj「)File [] fileEntry不能處理更多文件。 File [] fileEntry的任何替代方法是否包含無限數量或未知數量的文件?

+2

你有沒有得到任何異常? – Adi

+2

爲什麼你有'for(int i = 0; i <1; i ++){'?這個for循環只執行一次;你可以把它刪除。 –

+1

'File [] fileEntry是否可以替代無限數量或未知數量的文件?' - 通常您應該使用像'ArrayList'而不是原始數組,但這不是問題,因爲'listFiles();'已經分配一個適當大小的數組。請發佈[mcve],以便我們重現此問題。 –

回答

3

File[] fileEntry incase of unlimited或unknown number of files?

是的,使用ArrayList<File>這將自動爲您處理大小。


但這似乎並不成爲問題,因爲你知道所有你需要在創建陣列來處理這樣尺寸精確File[] fileEntry = folder.listFiles();的文件。

刪除此行

for (int i = 0; i < 1; i++) { 

這似乎useles ...如果問題仍然存在,發表您的堆棧跟蹤

1

深深我認出你了,你要收集在一個這些文件。

在我的情況下,首先我會建議收集文件路徑或文件,並將其添加到ArrayList<File>中,讀取這些文件並在ArrayList<byte[]>中收集,稍後如果要製作它一個單一的文件,當然,你可以使用ObjectOutputStream類寫ArrayList<byte[]>Object肯定創建一個單一的File

在這照顧文件閱讀&寫入字節大小不穿過你的Java堆空間邊界。