2011-08-08 78 views
1
import java.io.File; 


public class filesinDirectory { 

public static void main(String[] args) { 
    File path = new File("/home/vito/Desktop/Dir1"); 
    File[] files = path.listFiles(); 
    int length = files.length; // line 9 

    for (int i = 0; i != length; i++) { 
     if (files[i].isFile()) 
     System.out.println(i + ": " + files[i].getName()); 
    } 
} 
} 

與上面的代碼,每次我嘗試運行它時是未知的源我得到一個錯誤顯示java.lang.NullPointerException在線9。但是我不知道來源是什麼這個錯誤是。的「顯示java.lang.NullPointerException」錯誤

+2

@sotl - 如果其中一個答案解決了您的問題,請單擊旁邊的複選標記以將其標記爲接受的答案。 –

回答

0

的Javadoc說:

File.listFiles() 

Returns: 
    An array of abstract pathnames denoting the files and directories in the directory denoted by this abstract pathname. The array will be empty if the directory is empty. Returns null if this abstract pathname does not denote a directory, or 

如果發生I/O錯誤。

因此,目錄不存在或發生I/O錯誤。

3

files爲空。因此,當您撥打length屬性時,您會收到NPE。

+0

非常感謝。這是目錄名稱的概率。我甚至沒有想過要檢查。我認爲這表明這是一個問題,其中一個問題。 – sotI

5

根據的Javadoc File.listFiles()

如果此抽象路徑名不表示一個目錄,則此 方法返回null。

因此,Java是說/home/vito/Desktop/Dir1不是一個有效的目錄。你有你的大寫錯誤或什麼?

0

根據的Javadoc的java.io.File:

返回NULL如果此抽象路徑名不表示一個目錄,或者發生I/O錯誤 。

必須是以前的方法調用有問題。

0

好了,讓我們看看javadoc的說什麼

public File[] listFiles()
返回抽象路徑名錶示此抽象路徑名錶示的目錄中的文件的數組。 如果此抽象路徑名不表示一個目錄,則此方法返回null。否則返回一個File對象數組,其中一個用於目錄中的每個文件或目錄。表示目錄本身和目錄的父目錄的路徑名不包含在結果中。每個生成的抽象路徑名都是使用File(File,String)構造函數從此抽象路徑名構建而來的。因此,如果這個路徑名是絕對的,那麼每個結果路徑名都是絕對的;如果此路徑名是相對的,則每個生成的路徑名將相對於相同的目錄。

無法保證結果數組中的名稱字符串將以任何特定順序出現;他們並不特別保證按字母順序出現。

返回:
一個抽象路徑名數組,表示由此抽象路徑名錶示的目錄中的文件和目錄。如果目錄爲空,該數組將爲空。 如果此抽象路徑名不表示目錄或發生I/O錯誤,則返回null。 拋出:
SecurityException - 如果存在安全管理器且其SecurityManager.checkRead(java.lang.String)方法否認讀取目錄 訪問日期: 1.2

相關問題