2009-03-11 5 views
4

さて、私はこのコードを使用してJavaでファイルをロードしようとしています:ファイルが見つかりません。何故なの?

String file = "map.mp"; 
URL url = this.getClass().getResource(file); 
System.out.println("url = " + url); 
FileInputStream x = new FileInputStream("" + url); 

とクラスと同じフォルダ内にあるファイルにもかかわらず、それは、はい(それをそれを見つけることができないと言う完全なコードのtry catchブロックにはです)。

しかし、それは別の名前で同じコードを使用して別のファイルを見つけます。

URL url = this.getClass().getResource("default.png"); 
System.out.println("url2 = " + this.getClass().getResource("default.png")); 
BufferedImage img = ImageIO.read(url); 

なぜ私のコードは私のmap.mpファイルを見つけることができませんか?

+1

全く関係のない注釈では、url.toString()は "+ urlよりもはるかに効率的です(そしてより良いです)。 –

+0

FileNotFoundExceptionがスローされていると仮定する必要がありますか? – Powerlord

+0

これを実行すると何が印刷されますか?私は問題を推測しているのは、FileInputStreamがURLを好まないということです。 –

答えて

18

URLをファイル名のように使用しようとしています。そうではありません。 file://で始まるものです。他のデプロイメントシナリオでは、実際に開くファイルがまったく存在しない場合があります。たとえば、jarファイル内に存在する可能性があります。あなたが本当に必要ならばURL.getFile()を使うことができますが、そうしないほうがいいです。

getResource()の代わりにgetResourceAsStreamを使用すると、InputStreamが直接表示されます。または、URLを他のものにしたい場合はgetResource()を使用し続けますが、データを取得する場合はURL.openStream()を使用してください。

+0

最初にFnFEを終了する理由は何ですか? – OscarRyz

+0

2つ目はURLを取るImageIO.read()を使います。 –

4

FileInputStreamはURL文字列ではなくパラメータとしてファイル名をとります。

URLが指す内容を取得する通常の方法は、openStreamです。 URL自分でClass/ClassLoader.getResourceAsStreamに触れることなく、リソースへのストリームを開くことができます(実装内でURLが開きます)。

また、あなたがファイル URLを開くことができます。これは、あなたのファイルシステム上の瓶の外生のクラスファイルを持っていることが必要となるリソースについて

InputStream in = FileInputStream(new File(url.toURI())); 

。 JNLP(Java WebStart)にはファイルを開くためのAPIがあり、安全な方法です。

一般的に:Stringに変換する場合は、toStringまたはString.valueOfを使用して、何をしているのかを明確にします。また、Stringは幾分弱く型付けされていることに注意してください。型はそれに含まれるデータの形式についての指示を与えないので、URIまたはFileのようなものが好きです。

+0

ファイルを正しく読み込むにはどうしたらいいですか?これはJava Web Start Jarに入ります。 – William

0

アクセスしようとしているファイルが見つかったのか、目的のファイルであるかを確認してください。 Sys internals File Monitorを使用してください。それは、どのファイルがSOによってアクセスされていたか監視するのに役立ちます。

0

パスにスペースがありますか? %20が見えますか?それを取り除く。 次に、getResourceAsStream()と同じように、getResource(file)が動作します。

パスにはスペースがありません。常にそれらを避けてください。

関連する問題