我的文件下projectRoot/src/main/resources/levels/
訪問的src /主/資源/動態地從源代碼
位於如果我把Utils.getFileNamesInDirectory("src/main/resources/levels")
,它的工作原理。
但是,當項目打包時,levels
目錄被放置在.jar
的root
下。
如何在靜態類中創建這種動態?即src/main/resources/
因此,代碼將在eclipse中運行,並作爲獨立的jar。
代碼以列出目錄中的文件..
public class Utils {
public static List<String> getFileNamesInDirectory(String directory){
List<String> results = new ArrayList<String>();
File[] files = new File(directory).listFiles(new FilenameFilter() {
public boolean accept(File dir, String filename) {
return filename.endsWith(".json");
}
});
for (File file : files) {
if (file.isFile()) {
results.add(file.getName());
}
}
Collections.sort(results);
return results;
}
}
更新
我搬到使用getResourceAsStream
(如getResource
是導致IllegalArgumentException: URI is not hierarchical
),我能夠在列出的文件目錄在Eclipse
之內。
public static List<String> getFileNamesInDirectory(String directory){
List<String> results = new ArrayList<String>();
InputStream in = Utils.class.getResourceAsStream("/" + directory);
BufferedReader rdr = new BufferedReader(new InputStreamReader(in));
String line;
try {
while ((line = rdr.readLine()) != null) {
System.out.println("file: " + line);
results.add(new File(line).getName());
}
rdr.close();
} catch (IOException e1) {
e1.printStackTrace();
}
Collections.sort(results);
return results;
}
但是當我運行它作爲獨立的.jar我得到這條線以下錯誤:while ((line = rdr.readLine()) != null) {
爲什麼它不能正常工作之外Eclipse
?
Exception in thread "main" java.lang.NullPointerException
at java.io.FilterInputStream.read(FilterInputStream.java:133)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:322)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:364)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:210)
at java.io.InputStreamReader.read(InputStreamReader.java:205)
at java.io.BufferedReader.fill(BufferedReader.java:165)
at java.io.BufferedReader.readLine(BufferedReader.java:328)
at java.io.BufferedReader.readLine(BufferedReader.java:393)
at com.app.tools.Utils.getFileNamesInDirectory(Utils.java:31)
你不知道。 '/ src/main/resources'是Maven使用的一個** project **目錄約定,用於包含最終生成的歸檔/類路徑根目錄下的資源。 – 2014-08-31 18:55:44
在eclipse中你也應該使用類路徑而不是文件系統。 – 2014-08-31 18:56:00
我知道'src/main/resources'是'Maven'的目錄約定。你有沒有在文件系統上使用類路徑的例子? – bobbyrne01 2014-08-31 19:02:27