Выбор файла в другом каталоге для буферизованного чтения

У меня есть файл инициализации (initialize.java), который извлекает данные из fileInput.txt с помощью fileInputStream, но оба они находятся в разных каталогах.

Project/library/initialize.java
Project/resources/text/fileInput.txt

мой код в initialize.java:

FileInputStream fstream = new FileInputStream("/resources/text/fileInput.txt");

Но файл не читается. я тоже пробовал

FileInputStream fstream = new FileInputStream("./resources/text/fileInput.txt");

Но это тоже не сработало.

Как я могу получить доступ к txt-файлу и в чем разница между использованием «./resources» и «/resources»?

Спасибо, что прочитали это.


person puissant    schedule 13.03.2012    source источник
comment
Спасибо за всю помощь, ребята. Я понял, что это была моя большая ошибка, но, по крайней мере, я изучил материал ./ Directory :)   -  person puissant    schedule 13.03.2012


Ответы (4)


Разница огромна. На linux/unix/macos путь, начинающийся с /, начинается из корневого каталога. Путь, начинающийся с ./ или не начинающийся с текущего каталога приложения. Вызов

System.out.println(new File("."). getAbsolutePath()) проверить, где вы находитесь?

person Andrzej Jozwik    schedule 13.03.2012
comment
Глупый я.. Я сделал абсолютный путь и обнаружил, что на самом деле это Project/src/library, и мне пришлось сделать новый FileInputStream(src/resources/...) спасибо!! - person puissant; 13.03.2012
comment
Возможно, проблема в том, что resources — это ваша корневая папка в resources. Поэтому попробуйте InputStream in = ClassLoader.getResourceAsStream(/text/fileInput.txt) или InputStream in = ClassLoader.getResourceAsStream("text/fileInput.txt"), я никогда не знал :). Теперь корень — это ваш корень пути к классам. - person Andrzej Jozwik; 13.03.2012

FileInputStream fstream = новый FileInputStream («ресурсы/текст/fileInput.txt»);

Пробовали это?

person CoNgL3    schedule 13.03.2012

"./resources/text/fileInput.txt" или "resources/text/fileInput.txt" работает, а "/resources/text/fileInput.txt" нет.

Примечание. Это допустимо, если папка с именем «ресурсы» находится в корневом каталоге вашего проекта.

person Juvanis    schedule 13.03.2012

Как показывают другие ответы, путь, который вы передаете FileInputStream, зависит от ОС, а также от того, является ли путь относительным или абсолютным путем. Другой способ чтения файла — использовать вместо него Class.getResourceAsStream(). например

InputStream = this.getClass().getResourceAsStream("/resources/text/fileInput.txt")

Чтобы вышеизложенное работало, вам нужно иметь родительскую папку /resources в пути к классам. Для получения дополнительной информации о том, как работает getResourceAsStream, см. SO question

person Suresh Kumar    schedule 13.03.2012