Подтвердить что ты не робот

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

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

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

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

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

Я запускаю его в windows.

4b9b3361

Ответ 1

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

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

Ответ 2

Try

System.getProperty("user.dir")

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

Ответ 3

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

Скажем, ваше имя класса 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));

Ответ 4

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

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));

Ответ 5

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

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

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

Ответ 6

Это тоже работает:

Path file=Paths.get("Your file path");
InputStream is=Files.newInputStream(file);
BufferedReader br=new BufferedReader(new InputStreamReader(is));