2012-03-05 96 views
1

我目前正在爲學校開發一個項目,它基於Java,我在Linux Mint上使用Eclipse來編寫它。該任務說使用語句String[] filenames = new java.io.File("icons).list();來創建一個文件名的數組。如何製作包含文件目錄的字符串數組?

問題是我不知道該怎麼辦,我花了幾個小時搜索互聯網和我的教科書,但無濟於事。它需要成爲一個單獨的方法嗎?

下面是我對模型中需要的代碼的猜測(項目是用GUI來製作一個匹配的遊戲),這些名字將不得不稍後轉換成實際的圖標,但我確定我有部分想通了,我似乎無法得到darn文件進入陣列!

由於提前,

public String[] list() { 
    String[] fileNames = new java.io.File("icons").list(); 
    return fileNames; 
} 
+1

嘗試將路徑放在引號中的圖標所在的目錄中。 – 2012-03-05 00:15:36

+1

我不確定你的問題是什麼。您發佈的代碼將「圖標」目錄中的所有文件的名稱作爲數組返回。問題是:「我如何閱讀每個文件的內容?」 – jacobm 2012-03-05 00:16:31

+0

又是什麼問題? – 2012-03-05 00:17:27

回答

1

在Java中,File類不一定代表文件系統上的「現有」文件。例如:

File f = new File("some_unknown_unexisting_file.bob"); 
System.out.println(f.exists()); // most likely will print 'false' 

另外,該類從當前工作目錄解析文件。您可能會收到與此目錄

System.out.println(new File(".").getAbsolutePath()); 

在你的情況,如果可以的話,我會建議得到一個File[]陣列:

File[] files = new File("icons").listFiles(new FileFilter() { 
    @Override 
    public boolean accept(File f) { 
     return !f.isDirectory() && f.canRead(); 
    } 
}); 
for (File f : files) { 
    System.out.println(f.getAbsolutePath()); 
} 

將返回File對象的數組不屬於文件夾和你可以打開閱讀(請注意,這並非總是如此,但在你的情況下就好了)。

但如果你使用list(),那麼就等同於:

File parent = new File("icons"); 
String[] fileStr = parent.list(new FilenameFilter() { 
    @Override 
    public boolean accept(File dir, String name) { 
     File f = new File(dir, name); 
     return !f.isDirectory() && f.canRead(); 
    } 
}); 
for (String f : fileStr) { 
    System.out.println(new File(parent, f).getAbsolutePath()); 
} 

另外,與你的文件(String[])的列表中,您可以通過創建一個圖標:

String filename = fileStr[i]; // some file name within the array 
ImageIcon icon = new ImageIcon("icons" + File.separator + filename); 

或與您的文件列表(File[]),它更清潔:

File file = files[i]; // some file within the File[] array 
ImageIcon icon = new ImageIcon(file.getAbsolutePath()); 

祝你好運。

+0

這對我理解文件是什麼有幫助,基本上它是對包含路徑的字符串的引用?然後我假設實際上將按鈕上的圖標,我只需要一個新的ImageIcon。然而,我仍然不清楚如何真正閱讀文件名,getAbsolutePath給了我目錄「/ home/daniel/workspace/Assignment3 /」,但是我在Linux上運行這個目錄,並且TA將使用一個運行JCreator的窗口最有可能。 – DanBMan 2012-03-05 00:49:54

+0

對於'FilenameFilter'爲+1,另見['FileFilter'](http://docs.oracle.com/javase/7/docs/api/java/io/FileFilter.html)。 – 2012-03-05 01:39:17

+0

如果您使用的是Eclipse,那麼缺省路徑就是eclipse的項目路徑,因此不管使用的操作系統如何,它都不應該造成任何問題,因爲這是一個默認的平臺獨立行爲。一個'File'對象不僅是對路徑名的引用,而且是一個獲取路徑信息的工具。創建一個新的'File'不會創建或打開任何東西,但會爲您提供一組您可以使用給定路徑名執行的「操作」。 'JButton'有一個可以帶'Icon'的構造函數,是的,你創建一個新的'ImageIcon'並將其提供給'JButton'構造函數。 – 2012-03-05 02:59:35

0

你寫的代碼看起來還好。你確定文件夾「圖標」存在於Java看的地方嗎?

試試這個:

File f = new File("icons"); 
System.out.println("Does icons exist?" + f.exists()); 
System.out.println("Is it a dir?" + f.isDirectory()); 
System.out.println("How many files does it contain?" + f.list().length); 

祝你好運!

0

我遇到了同樣的問題。當我嘗試將圖標文件夾移動到src文件夾之前的文件夾中時,它似乎工作。不知道我在提交作業時會做什麼,因爲它在JCreator中工作,我相信它必須與.java文件一起使用。

相關問題