2016-08-16 2 views
3

私のラップトップでは奇妙な問題が発生しています。ファイル名にコロンが含まれているリソースを開くことができません

ノート: OSX バージョン:10.11.6 - エルキャピタン

のJava: Javaのバージョン "1.8.0_91" のJava(TM)SEランタイム環境(1.8.0_91-B14を構築) Java HotSpot(TM)64ビットサーバーVM(ビルド25.91-b14、混合モード)

ClassLoader#getResourceを使用して、app-2016-08-13T22:55:00Z.1.log.gzという形式のファイルを開くことを試みています。

/src/main/test/resourcesのファイルを配置しましたが、いつもnullに戻っています。

ファイル名をコロンなしの名前に変更すると、コードが機能します。 何が起こっているのですか?

@Test 
public void testColonFile() throws Exception { 
    String resourceFilename = "app-2016-08-13T22:55:00Z.1.log.gz"; 
    InputStream is = TestClass.class.getClassLoader().getResourceAsStream(resourceFilename); 
    //InputStream is null here! 
} 
+0

'toURI()'を削除することをお勧めします。 –

+0

HFS +とコロンについては多くの議論があります。 ':'はファイルパスの区切り文字として使われました。だから、ファイル名に ':'を使わないでください。 **システムは指定されたファイルを見つけることができません** 参考:ファイルシステムとファイルシステムを比較した[wikipage](https://en.wikipedia.org/wiki/Filename#Comparison_of_filename_limitations)彼らの限界。 – maxkoryukov

+1

コードが無効です。リソースはファイルではありません。それらは、ファイルシステムではなく、JARまたはWARファイルに入れることができます。 URIを直接使うか、 'getResourceAsStream()'を使うべきです。 – EJP

答えて

0

私の推測では、toURIあるコロンURLエンコードされ、そしてFileへのコンストラクタはそれを期待していません。

見に

System.err.println(Resources.getResource(resourceFilename).toURI()); 

のような行を追加してください。

+0

「toURI」の前には失敗しています。 'InputStream is = BlingPublisherTest.class.getClassLoader()。getResourceAsStream(resourceFilename);'は入力ストリームに対してもnullを返します。 – Setheron

関連する問題