私は次のようなファイルを読み込もうとしています:
FileInputStream fileInputStream = new FileInputStream("/com/test/Test.xml");
ファイルが見つからないという例外が常に発生します。どうすればそれを機能させることができますか?inputstreamは相対パスを使用しますか?
はい、これは相対的なパスを取ることができます。
なぜあなたの表現はうまくいかないのですか?非常に単純です。パス/com/test/Test.xml
は。で始まるため絶対パスであるため、実際にはルートから始まるディレクトリ/
にあるファイルを探しています。/com/test/
問題を解決する方法は?
プロジェクトの下にあるファイルを見つけようとしていると思います。./com/test/Test.xml
したがって、またはのような相対パスを使用できますcom/test/Test.xml
。これはおそらく役立つでしょう。おそらく、現在の作業ディレクトリとファイル構造がわからないためです。現在のディレクトリは、実行時に配置されている場所ですjava
。IDEから実行している場合、通常、作業ディレクトリはプロジェクトディレクトリです。
この場合、ファイルはプロジェクトルートの直下ではなく、その下のどこかにある./com/test/Test.xml
ため、パスは無効であると思います。Test.xml
./src/resources/com/test
この場合、おそらくファイルをファイルとしてではなく、リソース(クラスパスにある)として読み取りたいと思うでしょう。この場合、
getClass().getResourceAsStream("/com/test/Test.xml")
使ってみてください
class.getResourceAsStream(path)。その場合、パスは、このステートメントを呼び出すクラスを含むフォルダーからの相対パスである必要があります。
InputStream in = getClass().getResourceAsStream("/com/test/Test.xml");
これを試して、
String str = "Test.xml";
File file = new File(str);
String absolutePathOfFirstFile = file.getAbsolutePath();
FileInputStream fileInputStream = new FileInputStream(absolutePathOfFirstFile);
パスが正しくない必要があります。System.getProperty("user.dir");
のパスを使用または印刷することにより、現在のディレクトリを確認できます。new File(".")