FileReader выдает исключение, потому что путь к файлу имеет неправильный синтаксис? - PullRequest
0 голосов
/ 09 мая 2018

Я положил файл для чтения в мою папку ресурсов

src
|_main
   |_resources
     |_graphqls
       |_test.graphqls

Следующий фрагмент читает файл

final String pathToSchemaFile = this.getClass().getClassLoader().getResource("graphqls/test.graphqls").getFile();
final File = new File(pathToSchemaFile);

это результат, который я получаю при оценке объекта File, возвращенного .getFile() из предыдущего фрагмента.

file:\C:\maven_repository\com\...\app.jar!\graphqls\test.graphqls

enter image description here

При запуске следующего кода new FileReader(file) выдается это исключение

Method threw 'java.io.FileNotFoundException' exception.
file:\C:\maven_repository\com\...\app.jar!\graphqls\test.graphqls (The filename, directory name, or volume label syntax is incorrect)
java.io.FileNotFoundException: file:\C:\maven_repository\com\...\app.jar.jar!\graphqls\test.graphqls (The filename, directory name, or volume label syntax is incorrect)

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Вы можете избежать файла, создав InputStreamReader.

InputStreamReader reader = new InputStreamReader(
    this.getClass().getResourceAsStream("/graphqls/test.graphqls"), 
    StandardCharsets.UTF_8
);

Рекомендуется использовать YourClassName.class.getResourceAsStream(), если у вас нет особых причин использовать .getClass && .getClassLoader.

0 голосов
/ 09 мая 2018

Вы получаете доступ к файлу, который на самом деле находится внутри файла JAR (например, ZIP).

Если ваша банка находится на пути к классам:

InputStream is = YourClass.class.getResourceAsStream("1.txt");

Если его нет на пути к классам, вы можете получить к нему доступ через:

URL url = new URL("jar:file:/absolute/location/of/yourJar.jar!/1.txt");
InputStream is = url.openStream();
...