web-dev-qa-db-ja.com

FileInputStreamは相対パスでは機能しません

FileInputStreamからオブジェクトを作成し、ファイルの相対値をコンストラクターに渡そうとしましたが、正しく動作せず、FileNotFoundExceptionをスローしました

try {
   InputStream is = new FileInputStream("/files/somefile.txt");
} catch (FileNotFoundException ex) {
   System.out.println("File not found !");
}
14
Mahmoud Elshamy

最初の/は、パスを相対ではなく絶対にします。

先頭の/を削除してみてください:

InputStream is = new FileInputStream("/files/somefile.txt");

で:

InputStream is = new FileInputStream("files/somefile.txt");

それでも問題が解決しない場合は、 現在のディレクトリを確認する で、考えている場所からプログラムが実行されていることを確認してください。

System.out.println(System.getProperty("user.dir"));
40
Dukeling

他のポスターは正しいです。あなたが与えている道は相対的な道ではありません。潜在的にthis.getClass().getResourceAsStream("Path relative to the current class")のようなことができます。これにより、呼び出し元のクラスに相対的なパスに基づいて、ファイルをストリームとしてロードできます。

詳細については、Java APIを参照してください。 http://docs.Oracle.com/javase/7/docs/api/Java/lang/Class.html#getResourceAsStream(Java .lang.String)

5
Michael
  1. これは相対パスではなく、絶対パスです。
  2. Windowsを使用している場合、パスの前にドライブ文字を追加する必要があります。

InputStream is = new FileInputStream("C:/files/somefile.txt");

windowsは/シンボルを「ルート」としてサポートしていません

JARに入れるファイルをロードする場合は、使用する必要があります

getClass().getResource("path to your file");

または

getClass().getResourceAsStream("path to your file");
2
BackSlash