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


83

Я хочу програму Java, яка читає вказане користувачем ім'я файлу з поточного каталогу (того самого каталогу, де запущений файл .class).

Іншими словами, якщо користувач вказав ім'я файлу як "myFile.txt", і цей файл уже знаходиться в поточному каталозі:

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

не працює. Чому?

Я запускаю його у вікнах.


1
Це те саме і в Linux
Kasun Siyambalapitiya

Відповіді:


52

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

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


* Зверніть увагу, що ця "директорія" насправді може бути файлом jar, залежно від того, звідки завантажено клас.


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

2
@piiligrim, залежить від вашої конфігурації запуску
Thorbjørn Ravn Andersen

@DenisTulskiy Я працюю над Eclipse таким же кодуванням, як це робив приклад. Шахта все ще не працює, чому це?
вітряний звук

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.