2015-02-07 186 views
0

我似乎沒有正確解釋我的代碼,但由於我剛開始學習,似乎錯過了錯誤。這是一項家庭作業,我需要使用JxploreFile對象數組。這是我遇到的麻煩的部分代碼:將文件對象添加到數組

private JxploreFile[] getSubFolders() 
{ 
    File subFiles[]; 
    subFiles = file.listFiles(); 

    File subFolders[]; 
    int p = 0; 
    for(int i = 0; i < subFiles.length; i++) 
    { 
     if(subFiles[i].isDirectory() == true) 
     { 
      Array.set(subFolders, p, subFiles[i]); 
     } 
    } 

    JxploreFile foldersToReturn[] = new JxploreFile[subFolders.length]; 
    for(int i=0; i < subFolders.length; i++) 
    { 
     foldersToReturn[i] = new JxploreFile(subFolders[i]); 
    } 
    return foldersToReturn; 
} 

具體來說,for循環,其中我試圖標記爲.isDirectory將文件添加到一個新的數組。我也嘗試了其他方法,通過聲明indexnumbers將每個來自subFiles Array的新文件手動放入子文件夾數組中,但這也證明是錯誤的。在這一點上,我沒有想法,我希望有人能指出我明顯的,因爲我可能錯過了一些基本的東西。

編輯: 對不完整的帖子感到抱歉,這是我第一次在這裏發帖,因爲我通常會嘗試從他人的帖子中過濾掉我自己的問題。我得到的錯誤確實是'子文件夾'尚未初始化,我不明白,因爲我在第六行寫了 文件子文件夾[]; 據我所知應該聲明變量子文件夾變成一個數組,或者這是我出錯的地方? 此外,我的問題可能不夠具體,我正在尋找導致錯誤的原因(我沒有提到):爲什麼'子文件'沒有被初始化。

+0

那麼..什麼是在你的代碼中造成麻煩? – 2015-02-07 16:24:11

+0

「麻煩」太籠統了。你會得到什麼錯誤?將它們添加到您的問題。你期望會發生什麼,你會得到什麼? – RealSkeptic 2015-02-07 16:26:06

+1

「子文件夾」尚未初始化。 – wassgren 2015-02-07 16:26:08

回答

1

數組subFolders尚未正確初始化。爲了在Array.set方法中使用該數組,它必須被初始化並分配一個大小。

另一種方法是使用List代替。當您處理更具動態性的數據時,列表非常好當你不知道數組的大小時。然後,您可以簡化代碼:

File[] subFiles = file.listFiles(); 

// Create the list 
List<JxploreFile> subFolders = new ArrayList<>(); 

// Add all the sub folders (note that "file" is a bit magic since it 
// is not specified anywhere in the original post 
for (File subFile : file.listFiles()) { 
    if (subFile.isDirectory()) { 
     subFolders.add(new JxploreFile(subFile)); 
    } 
} 

// Return an array 
return subFolders.toArray(new JxploreFile[subFolders.size()]); 

您還可以通過使用Java 8個流像這樣簡化了整個事情更進一步:

return Arrays.stream(file.listFiles()) 
      .filter(File::isDirectory) 
      .toArray(JxploreFile[]::new); 

欲瞭解更多信息:

+0

你能向我解釋爲什麼子文件夾陣列沒有正確初始化,因爲我在第六行做了intitialize,不是嗎? – Ciphra 2015-02-07 17:14:48

+0

@Ciphra,你已經聲明瞭它'File subFolders [];'但是沒有用值初始化它。檢查初始化和聲明[在Java中創建對象](http://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html)之間區別的答案中的鏈接。 – wassgren 2015-02-07 17:16:58

+0

我明白你的意思了,我在這裏試圖做的事情基本上不可能存在於當前的結構中,因爲它需要我定義一個數組的長度,直到我填充它纔會知道。這就是爲什麼你使用列表展示它的原因。感謝耐心回答,我想這些東西有點慢。 – Ciphra 2015-02-07 17:25:31

1

沒有在您的文章沒有問題,但無論如何,在這裏,我在你的代碼中發現的問題:

File subFolders[]; 
int p = 0; 
for(int i = 0; i < subFiles.length; i++) 
{ 
    if(subFiles[i].isDirectory() == true) 
    { 
     Array.set(subFolders, p, subFiles[i]); 
    } 
} 
調用 Array.set

你永遠不會初始化subFolders這將引發NullPointerException

而且,你不需要做

if(subFiles[i].isDirectory() == true) 

,你可以簡單地做

if(subFiles[i].isDirectory()) 

subFiles[i].isDirectory()已經是一個條件。