Я разрабатываю приложение Java EE для Mac OS, используя сервер Tomcat 7.
Структура моего проекта выглядит так:

Ниже приведена функция, которую я использую для чтения файла JSON — 20180507.json
private void getCurrencyJSON(){
JSONParser jsonParser = new JSONParser();
try
{
System.out.println(new File(".").getAbsoluteFile());
FileReader reader = new FileReader("/data/20180507.json");
//Read JSON file
Object obj = jsonParser.parse(reader);
JSONArray currencyList = (JSONArray) obj;
System.out.println(currencyList);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
} catch (org.json.simple.parser.ParseException e) {
e.printStackTrace();
}
}
Это приводит к исключению java.io.FileNotFoundException: /resources/20180507.json (No such file or directory).
Кроме того, System.out.println(new File(".").getAbsoluteFile()) приводит к /private/var/folders/0z/88rzgp7s4h3d18zzp4btcr2h3x133x/T/AppTranslocation/89F63404-971F-4AB6-9727-B1BD6E9F4A8D/d/eclipse/Eclipse.app/Contents/MacOS/.
Как прочитать этот файл? Кроме того, есть ли ресурс, из которого я могу узнать больше о том, как работают пути к файлам в Java?
заранее спасибо
Если вы действительно хотите сохранить его в папке src, попробуйтеnew FileReader("data/20180507.json"); . Это сработает.
@leopal Добавление его в ресурсы дает мне ту же ошибку - java.io.FileNotFoundException: /resources/data/20180507.json (Нет такого файла или каталога), хотя файл существует в ресурсах> данные
конечно, потому что во время выполнения этот относительный путь не существует. Во время выполнения ваш путь — это место, где «работает» ваша IDE, ваша древовидная структура верна, но она может быть вложена и во время выполнения. Возможно, вам следует поместить его в ресурсы или системный фиксированный путь, например, домашнюю страницу пользователя или временный каталог.
@ArchitArora Я предложил загрузить его из пути к классам, /resources/data/20180507.json по-прежнему является относительным путем. Проверьте это, чтобы узнать больше.
вы пробовали предложение @ruhul new FileReader("data/20180507.json")
Ссылка: journaldev.com/848/java-file-path-absolute-canonical




Не забудьте использовать:
FileReader reader = new FileReader("data/20180507.json");
вместо "/данные/20180507.json", потому что это путь к папке "данные" внутри каталога корень (/).
Также, пожалуйста, попробуйте поместить ваш каталог «data» в папку «resource». При создании приложения с использованием eclipse содержимое папки ресурсов размещается рядом с классами после компиляции.
Любой из них должен решить вашу проблему.
То, что я сказал, также верно, ваш путь к классу относится к папке внутри корневого каталога, и обычно мы помещаем необработанные файлы ресурсов и папку в папку ресурсов, а не только снаружи. если он помещен в папку ресурсов, вы можете получить к нему доступ, используя относительный путь вместо абсолютного пути.
Вы должны хранить свои данные в папке ресурсов. подобно:
src
|__main
|__java
| |__....
|
|__resources
|__data
|__20180507.json
После сохранения этого: вы можете попробовать следующий код, чтобы загрузить его из папки ресурсов:
JSONParser parser = new JSONParser(this.getClass().getResourceAsStream("data/20180507.json"));
Почему бы не добавить его в папку
resourcesи не прочитать из пути к классам во время выполнения?