Мне нужна Java-программа, которая считывает указанное пользователем имя файла из текущего каталога (того же каталога, в котором запущен файл .class).
Другими словами, если пользователь указывает имя файла «myFile.txt», и этот файл уже находится в текущем каталоге:
reader = new BufferedReader(new FileReader("myFile.txt"));
не работает. Почему?
Запускаю в windows.
Ответы:
Текущий каталог не обязательно является каталогом, в котором находится файл .class. Это рабочий каталог процесса. (то есть: каталог, в котором вы были, когда запускали JVM)
Вы можете загружать файлы из того же каталога *, что и файл .class, с помощью getResourceAsStream () . Это даст вам InputStream, который вы можете преобразовать в Reader с помощью 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
источник
Если вы знаете, что ваш файл будет находиться там, где находятся ваши классы, этот каталог будет в вашем пути к классам. В таком случае можете быть уверены, что это решение решит вашу проблему:
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"));
источник
попробуйте использовать "." Например
File currentDirectory = new File(".");
Это сработало для меня
источник