Java, чтение файла из текущего каталога?
Мне нужна программа java, которая читает указанное пользователем имя файла из текущего каталога (тот же каталог, в котором запущен файл .class).
Другими словами, если пользователь указывает имя файла как "myFile.txt", и этот файл уже находится в текущем каталоге:
reader = new BufferedReader(new FileReader("myFile.txt"));
не работает. Почему?
Я запускаю его в windows.
Ответы
Ответ 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));