2016-07-20 11 views
0

-CodeGetResource mit Google io Dateien führt zu FileNotFoundException für Datei aus Glas root

Files.toString(new File(Thread.currentThread().getContextClassLoader().getResource(
    "login_commands.json").getFile()), Charsets.UTF_8) 

Exception

java.io.FileNotFoundException: file:\C:\application\target.jar!\login_commands.json (The filename, directory name, or volume label syntax is incorrect) 

Jar Struktur

- root

  • login_commands.json
  • usw.

Der Code funktioniert gut von IDE.

Wie lese ich diese Datei?

Antwort

1

Lösung

Verwenden

Thread.currentThread().getContextClassLoader().getResourceAsStream("login_commands.json") 

Insteed von

Thread.currentThread().getContextClassLoader().getResource("login_commands.json").getFile() 

Warum?

Wenn Sie getResource(), die Classloader versuchen, Ihre Datei erhalten von <JAR_FOLDER>/YOUR_JAR.jar!login_commands.json und dieser Weg ist nicht gültig einen java.io.File zu erstellen und wirft einen FileNotFoundException

Beachten Sie, dass Sie den Code in IDE funktioniert, weil Ihre IDE haben ihre eigeneClassloader dass, wenn Sie getResource oder getResourceAsStream aufrufen, erhalten Sie die Datei von workspace/test/target/classes/login_commands.json, die einen gültigen Pfad zum Erstellen einer Datei ist.