2013-04-12 7 views
5

JAR内にパッケージ化されているファイルから、それを読み込むクラスとともに読み込もうとしています。これを行うために、私は次のようにします。私は作成して、OSX上のJARファイルを実行するとJAR内のファイルをウィンドウ上で操作していない

getClass().getClassLoader().getResourceAsStream(file) 

これは正常に動作しますが、私は作成して、Windows上のJARファイルを実行した場合、上記の行はnullを返します。

ここに何か不足していますか?私がOSX上でJARを作成し、それをWindows上で実行するとうまくいきます。この問題は、Windows上でJARを作成した場合にのみ発生します。

EDIT:JARファイル内にフォルダ階層が存在しないことに言及することは重要です。すべてが1つのレベルに格納されているため、ファイルを読み取るクラスとファイル自体が同じディレクトリにあります。私はOSXとWindowsの両方で、JARファイルを作成していますかまた、これは次のようになります。

jar -cmf manifest.mf run.jar *.class file1 file2 

EDIT 2:私はロードしようとしているファイルは、Java .propertiesファイルです。私はそれを取って問題の原因となっているのではないのですか?

+0

jarファイルはzipファイルなので、Windowsで作成したバージョンを確認することができます。 .zipで名前を変更し、Windowsエクスプローラで内部を参照してください。 –

+0

@ NathanielWaisbrot正確に何を確認しますか?ファイルはすべてそこにあるのですか?私はそれを確認しました(代わりにjar -tfを使用しています)。それは確かにそこにあります。質問に記載された構造 – Kumalh

+0

Mac上に構築されたjarファイルはWindows上で動作しますが、Windows上に構築されたjarファイル動作しません。 2つのjarファイルの内容を比較します。同じバージョンのJavaを使用している場合は、.classファイルが同一である必要があります。 –

答えて

0

クラスローダー部分をスキップします。

+0

私は 'Classloader.getSystemResource()'をしていました。 –

+0

私はそれも試みました。同じ結果:OSXでは動作しますが、Windowsでは動作しません。私も 'this.getClass()。getResourceAsStream(" \ file ");'を試しましたが、どちらも動作しませんでした – Kumalh

+0

Aha!パス区切り文字は使用しないでください。ちょうどファイル名。 –

0

このようにgetClass()。getResourceAsStream( "/ file1")を試してください。getClass()。getResource。

-1

ファイルセパレータを使用する場合は、ハードコードしないでください! 代わりにjava.io.File.separatorを使用してください。http://docs.oracle.com/javase/7/docs/api/java/io/File.html#separator

+0

File.pathSeparatorはOS X上のセミコロンを返しますが、それはあなたが使用するためのものではありません。 File.separatorはスラッシュを返し、したがって使用するものです。 – user3856210

関連する問題