FileReader не может найти файл в проекте Java

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

Ниже приведена функция, которую я использую для чтения файла 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?

заранее спасибо

Почему бы не добавить его в папку resources и не прочитать из пути к классам во время выполнения?

leopal 24.07.2019 13:55

Если вы действительно хотите сохранить его в папке src, попробуйтеnew FileReader("data/20180507.json"); . Это сработает.

MD Ruhul Amin 24.07.2019 13:57

@leopal Добавление его в ресурсы дает мне ту же ошибку - java.io.FileNotFoundException: /resources/data/20180507.json (Нет такого файла или каталога), хотя файл существует в ресурсах> данные

Archit Arora 24.07.2019 13:58

конечно, потому что во время выполнения этот относительный путь не существует. Во время выполнения ваш путь — это место, где «работает» ваша IDE, ваша древовидная структура верна, но она может быть вложена и во время выполнения. Возможно, вам следует поместить его в ресурсы или системный фиксированный путь, например, домашнюю страницу пользователя или временный каталог.

ItFreak 24.07.2019 14:02

@ArchitArora Я предложил загрузить его из пути к классам, /resources/data/20180507.json по-прежнему является относительным путем. Проверьте это, чтобы узнать больше.

leopal 24.07.2019 14:03

вы пробовали предложение @ruhul new FileReader("data/20180507.json")

MangduYogii 24.07.2019 14:09

Ссылка: journaldev.com/848/java-file-path-absolute-canonical

MD Ruhul Amin 24.07.2019 14:11
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
879
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Не забудьте использовать:

FileReader reader = new FileReader("data/20180507.json"); 

вместо "/данные/20180507.json", потому что это путь к папке "данные" внутри каталога корень (/).

Также, пожалуйста, попробуйте поместить ваш каталог «data» в папку «resource». При создании приложения с использованием eclipse содержимое папки ресурсов размещается рядом с классами после компиляции.

Любой из них должен решить вашу проблему.

То, что я сказал, также верно, ваш путь к классу относится к папке внутри корневого каталога, и обычно мы помещаем необработанные файлы ресурсов и папку в папку ресурсов, а не только снаружи. если он помещен в папку ресурсов, вы можете получить к нему доступ, используя относительный путь вместо абсолютного пути.

Paul P Joby 24.07.2019 14:28
Ответ принят как подходящий

Вы должны хранить свои данные в папке ресурсов. подобно:

src
|__main
   |__java
   |  |__....
   |
   |__resources
      |__data
         |__20180507.json

После сохранения этого: вы можете попробовать следующий код, чтобы загрузить его из папки ресурсов:

JSONParser parser = new JSONParser(this.getClass().getResourceAsStream("data/20180507.json"));

Другие вопросы по теме