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


Я хочу java-программу, которая читает указанное Пользователем имя файла из текущего каталога (тот же каталог, где .запускается файл класса).

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

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

не работает. Зачем?

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

7 59

7 ответов:

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

вы можете загружать файлы из одной директории* как .файл класса с getResourceAsStream (). Это даст вам входной поток, который вы можете преобразовать в читатель с InputStreamReader.


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

попробовать

System.getProperty("user.dir")

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

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

допустим, ваш класс называется 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));

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

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

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

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

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

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

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

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

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