2016-08-26 6 views
0

私のアプリケーションがフォルダにあるtxtファイルをロードします。これは、(私は、Eclipseから実行したときに動作し、私はJarファイルにエクスポートしたときにしません:JARファイルでURL getResourceが動作しない

URL url = getClass().getClassLoader().getResource("batTemplate.txt"); 
java.nio.file.Path resPath; 
String bat = ""; 

try { 
    resPath = java.nio.file.Paths.get(url.toURI()); 
    bat = new String(java.nio.file.Files.readAllBytes(resPath), "UTF8"); 
} catch (URISyntaxException | IOException e1) { 
     e1.printStackTrace(); 
} 

注:ここでは

enter image description here

は、私は、ファイルをロードしています方法です生成されたJARに必要なlibを抽出します)。 ファイルがJARファイルに存在するため、そのファイルが抽出されていることがわかりました。また、イメージが動作します。

enter image description here

エラーMSG:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: 
    Illegal character in path at index 38: file:/C:/DataTransformation/Reports Program/ReportsSetup.jar 
     at com.sun.nio.zipfs.ZipFileSystemProvider.uriToPath(ZipFileSystemProvider.java:87) 
     at com.sun.nio.zipfs.ZipFileSystemProvider.getFileSystem(ZipFileSystemProvider.java:166) 
     at com.sun.nio.zipfs.ZipFileSystemProvider.getPath(ZipFileSystemProvider.java:157) 
     at java.nio.file.Paths.get(Unknown Source) 
     at ReportSetup$13.mouseReleased(ReportSetup.java:794) 

私はまた、しかし、彼らはJARファイルの外に/ URLをファイルを参照し、ここでは同様の問題を見ました。

+0

が重複する可能性:

Path batFile = Files.createTempFile("template", ".bat"); try (InputStream stream = getClass().getClassLoader().getResourceAsStream("batTemplate.txt")) { Files.copy(stream, batFile); } 

あなたは単ににInputStreamReaderからテキストを読むことができます:あなたは、一時ファイルにリソースをコピーすることができ

try (Scanner s = new Scanner(getClass().getClassLoader().getResourceAsStream("batTemplate.txt"), "UTF-8")) { bat = s.useDelimiter("\\Z").next(); if (s.ioException() != null) { throw s.ioException(); } } 

:あなたは、スキャナを使用することができます://stackoverflow.com/questions/941754/how-to-get-a-path-to-a-resource-in-a-java-jar-file – NageN

+3

.jarエントリはファイルではありません。パス*にリソースを変換することはできません。代わりにgetResourceAsStreamを使用して読み取ります。 – VGR

+0

@VGRありがとう、getResourceAsStreamを変更しました。そして今働いています:) – Shank

答えて

2

.jarエントリはファイルではありません。それは.jarアーカイブの一部です。リソースをPathに変換することはできません。代わりにgetResourceAsStreamを使用して読む必要があります。

すべてを読むには、いくつかの選択肢があります。 HTTPの

StringBuilder text = new StringBuilder(); 
try (Reader reader = new BufferedReader(
    new InputStreamReader(
     getClass().getClassLoader().getResourceAsStream("batTemplate.txt"), 
     StandardCharsets.UTF_8))) { 

    int c; 
    while ((c = reader.read()) >= 0) { 
     text.append(c); 
    } 
} 

String bat = text.toString(); 
1

getClass()。getResourceAsStream( "/ batTemplate.txt")を試してください。

thisもチェックしてください。役立つかもしれません。

関連する問題