2014-01-21 72 views
2

現在我手動將歌曲文件名寫入字符串數組,然後將字符串發送到InputStream is = this.getClass().getResourceAsStream(filename);播放歌曲。從java項目的資源文件夾中獲取所有文件名

我寧願循環播放資源文件夾中的所有歌曲名稱,並將它們加載到數組中,這樣每次添加歌曲時,我都不需要手動將它輸入到數組中。

我所有的歌曲都位於resources文件夾:

enter image description here

是否有一個Java方法或東西抓住這些名字?

當我輸出爲.jar時,這些文件需要工作。

我以爲我可以用這樣的東西?

InputStream is = this.getClass().getClassLoader().getResourceAsStream("resources/");

是否有listFiles()或東西是什麼?

謝謝

回答

2

不,因爲類路徑在Java中是動態的。任何額外的Jar都可以貢獻一個包,類加載器可以像想象一樣動態,甚至可以根據需要動態創建類或資源。

如果您有一個特定的JAR文件,並且您知道該JAR文件中的路徑,那麼您可以簡單地將該文件視爲存檔並通過java.util.jar.JarFile訪問該文件,該文件允許您列出文件中的所有條目。

JarFile jar = new JarFile("res.jar"); 
Enumeration<JarEntry> entries = jar.entries(); 
while (entries.hasMoreElements()) { 
    JarEntry entry = entries.nextElement(); 
    System.out.println(entry.getName()); 
} 

如果你想這樣做,沒有你需要得到動態的葉夫根尼·建議的文件名(JAR本身內的一類例如)知道JAR文件名和路徑;只需使用你自己的類名(包括包;你的截圖看起來像你在默認包中,這是一個壞主意)。

+0

所以我可以一次讀取一個文件名但不能t把所有的文件名都放到一個數組中,然後按照我的意思將它們發送到'getResourceAsStream'? – Growler

+0

我不知道我是否正確理解你。當然,您可以迭代條目並構建資源標識符的數組(或更好的數據結構)。'getResourceAsStream'只能使用單個標識符。 –

+0

這就是我想要做的。我想將所有歌曲名稱都作爲字符串並將它們放入我自己的字符串數組中。然後按照我希望的單一路徑將它們加載到'getResourceAsStream'中。我只是不知道如何從「資源」文件夾中獲取所有歌曲名稱。 – Growler

0

從這裏你可以嘗試這樣的事情

Enumeration<URL> e = ClassLoader.getSystemResources("org/apache/log4j"); 
while (e.hasMoreElements()) { 
    URL u = e.nextElement(); 
    String file = u.getFile(); 
... 

file:/D:/.repository/log4j/log4j/1.2.14/log4j-1.2.14.jar!/org/apache/log4j

jar解壓路徑並使用JarFile類知道組織/阿帕奇/ log4j的內容。

如果解壓,你會得到直線路徑,並使用File.listFIles

1

使用的類路徑,資源管理器1.0,即com.google.classpath.ClassPathFactory

<dependency> 
     <groupId>com.google.classpath-explorer</groupId> 
     <artifactId>classpath-explorer</artifactId> 
     <version>1.0</version> 
</dependency> 

例子:

ClassPathFactory factory = new ClassPathFactory(); 
String[] allFiles = factory.createFromJVM().findResources(resourceName, new RegExpResourceFilter(".*", ".*\\.mp3")); 

//.mp3或.txt或.json等

相關問題