Почему входной поток не находит файл вне папки класса - PullRequest
0 голосов
/ 11 января 2019

Я хочу использовать поток ввода с файлом «NewFile.java», код, который у меня работает, прекрасно работает, если файл находится в той же папке, что и файл .class, выполняющий действие. Но как только я двигаюсь, я получаю нулевую ссылку.

Я пытался использовать абсолютные и относительные пути с и без '/' в начале.

InputStream in = getClass()
                .getResourceAsStream("NewFile.java");

Я хотел бы получить файл, если он находится в корневом каталоге проекта.

Ответы [ 3 ]

0 голосов
/ 11 января 2019

Лучше использовать InputStream in = new FileInputStream (новый файл ("путь / к / ваш файл"));

То, как вы используете его сейчас, - это ресурс, который должен быть в пути к классам.

0 голосов
/ 11 января 2019

Существует различие между файлами в файловой системе и ресурсами в пути к классам. В общем случае исходный файл .java не будет скопирован / добавлен в путь к классам.

Для класса foo.bar.Baz и ресурса foo/bar/images/test.png можно использовать

Baz.class.getResourceAsStream("images/test.png")
Baz.class.getResourceAsStream("/foo/bar/images/test.png")

Как видите, пути пути к классам , возможно внутри файлов .jar.

Использовать пути к файловой системе:

Path path = Paths.get(".../src/main/java/foo/bar/Baz.java");
InputStream in = Files.newInputStream(path);
List<String> lines = Files.readAllLines(path);
List<String> lines = Files.readAllLines(path, StandardCharsets.ISO_8859_1);
Files.copy(path, ...);
0 голосов
/ 11 января 2019

getResourceAsStream() не предназначен для открытия произвольных файлов в файловой системе, но открывает файлы ресурсов, расположенные в пакетах java. Поэтому имя «/com/foo/NewFile.java» будет искать «NewFile.java» в пакете «com.foo». Вы не можете открыть файл ресурса вне пакета, используя этот метод.

...