2016-11-15 1 views
0

パッケージ内のすべてのファイルを取得します。Javaの私はこのコードを使用してJavaパッケージ内のすべてのファイルを取得しようとしている

public static ArrayList<String> getThemes() { 
     ArrayList<String> themes = new ArrayList<>(); 

    File folder = new File(Main.class.getResource("fxml/").toString()); 

     for (File file : folder.listFiles()) { 
      if (file.getName().endsWith(".css")) 
       themes.add(file.getName().replaceFirst("[.][^.]+$", "")); 
     } 

    return themes; 
} 

このコードはで私のすべてのCSSファイルのArrayListのを与えることになっていますパッケージfxml(フル:dev.thetechnokid.rw.fxml)。

私は現在のディレクトリと完全なファイルパスを使用するなど、他の多くの方法を使用しましたが、まだNullPointerExceptionとなります。スタックトレースでは十分な情報が得られません。FXML LoadExceptionだけです。

このコードで何が問題になっていますか?

+0

どのパッケージを? – Jerry06

答えて

2

Class.getResource()は、フォルダではなくファイルのみを検出します。 < - 私は訂正しました。

Class.getResourceは非常に便利な抽象化ではありません。 このメカニズムは、リソースがファイルシステム内にあるのか、アーカイブ内にあるのかがわからないときに、主に役立ちます。 ClassLoaderはそれを抽象化します。あなたのケースでは

は、あなたがファイルを持って知っているので、あなたにも、直接自分のAPIを使用する場合があります。

List<String> cssFileNames = Files.walk(Paths.get("fxml")) 
           .map(Path::getFileName) 
           .map(Path::toString) 
           .filter(n -> n.endsWith(".css")) 
           .collect(Collectors.toList()); 

をしかし、あなたが本当にClassLoaderを使用する必要がある場合、1つのトリックはその後、知られているファイルを起動することです1つ上のレベルに移動し、そこから行く:

Path path = new File(
     Main.class.getResource("fxml/iKnowThisFileExists.txt").toURI() 
).getParentFile().toPath(); 
List<String> cssFileNames2 = Files.walk(path) 
           .map(Path::getFileName) 
           .map(Path::toString) 
           .filter(n -> n.endsWith(".css")) 
           .collect(Collectors.toList()); 
+0

'Class.getResource()'はフォルダ 'Path.get(" fxml ")を検出できます。これはDefaultFileSystemに依存しているため動作しないと思います – Jerry06

+0

@ Jerry06あなたは最初の部分について正しいですが失敗しますデフォルトのファイルシステムに頼って何が問題なのかを確認してください –

+0

ありがとう!最初のものは何らかの理由で私にエラーを与えたが、2番目のものは完全に働いた。 – theTechnoKid

0

トライ使用getFileの代わりtoString

File folder = new File(Main.class.getResource("fxml/").getFile());

0

私がお勧めします:Main.classの

URL packageURL; 
packageURL = classLoader.getResource("fxml/"); 
URI uri = new URI(packageURL.toString()); 
File folder = new File(uri.getPath()); 
関連する問題