Java, читая файл из текущего каталога?


83

Мне нужна Java-программа, которая считывает указанное пользователем имя файла из текущего каталога (того же каталога, в котором запущен файл .class).

Другими словами, если пользователь указывает имя файла «myFile.txt», и этот файл уже находится в текущем каталоге:

reader = new BufferedReader(new FileReader("myFile.txt"));

не работает. Почему?

Запускаю в windows.


1
То

Ответы:


52

Текущий каталог не обязательно является каталогом, в котором находится файл .class. Это рабочий каталог процесса. (то есть: каталог, в котором вы были, когда запускали JVM)

Вы можете загружать файлы из того же каталога *, что и файл .class, с помощью getResourceAsStream () . Это даст вам InputStream, который вы можете преобразовать в Reader с помощью InputStreamReader .


* Обратите внимание, что этот «каталог» на самом деле может быть файлом jar, в зависимости от того, откуда был загружен класс.


15
+1. Если вы используете IDE, например Eclipse или Idea, текущий каталог будет каталогом проекта, а не выходными данными компилятора.
Денис Тульский

2
@piiligrim, зависит от вашей конфигурации запуска
Торбьёрн Равн Андерсен

@DenisTulskiy Я работаю над Eclipse так же, как и человек из примера. Моя до сих пор не работает. Почему?
windsound

79

Пытаться

System.getProperty("user.dir")

Возвращает текущий рабочий каталог.


6
но он возвращает только путь до корневого каталога проекта. как мы можем получить путь к текущему пакету в основном методе java
Таймур Чангайз

35

Ни один из приведенных выше ответов не работает для меня. Вот что у меня работает.

Допустим, имя вашего класса - Foo.java, для доступа к myFile.txt в той же папке, что и Foo.java, используйте этот код:

URL path = Foo.class.getResource("myFile.txt");
File f = new File(path.getFile());
reader = new BufferedReader(new FileReader(f));

1
Нет доступа к файлу. Выдача исключения NullPointerException в path.getFile.
Avik Chowdhury

Это сработало для меня, спасибо. Я предлагаю вам написать первый код следующим образом: URL path = JAVA_FILE_NAME.class.getResource ("myFile.txt");
EX1T_ZER0

16

Файлы в вашем проекте доступны относительно вашей папки src. если вы знаете, в каком пакете или папке будет myfile.txt, скажите, что он находится в

----src
--------package1
------------myfile.txt
------------Prog.java

вы можете указать его путь как "src / package1 / myfile.txt" из Prog.java


5

Если вы знаете, что ваш файл будет находиться там, где находятся ваши классы, этот каталог будет в вашем пути к классам. В таком случае можете быть уверены, что это решение решит вашу проблему:

URL path = ClassLoader.getSystemResource("myFile.txt");
if(path==null) {
     //The file was not found, insert error handling here
}
File f = new File(path.toURI());

reader = new BufferedReader(new FileReader(f));

1

Попробуй это:

BufferedReader br = new BufferedReader(new FileReader("java_module_name/src/file_name.txt"));

0

попробуйте использовать "." Например

File currentDirectory = new File(".");

Это сработало для меня

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.