Arhn - архитектура программирования

eclipse создает файл jar с файлом txt, на который можно ссылаться

У меня есть проект в eclipse

foo_project
 - src
  - bar_package
       bam.java
       info.txt
  - info.txt
 - resources
  - info.txt

Скажем, в bam.java я распечатываю содержимое info.txt, например

    try {
        welcome = new BufferedReader(new FileReader("src/info.txt"));
        String currentLine = null;
        while ( (currentLine = welcome.readLine()) != null) {
            System.out.println(currentLine);
        }
        welcome.close();

    } catch (Exception fof) {
        System.err.println(fof.toString());
    } 

Он работает внутри eclipse, как и когда я помещаю info.txt в папку src, однако он не работает, когда я экспортирую этот проект в файл JAR.

В коде я пробовал только "info.txt", а также "src/info.txt", ни один из них не работает! Как видите, я практически везде помещал файл info.txt, но безуспешно!

Как я могу сослаться на этот info.txt в коде Java и заставить Java найти его как внутри файла eclipse, так и в файле JAR?

03.07.2013

  • Вы должны попробовать использовать относительный путь. Например, см. stackoverflow.com/questions/9466631/java-relative-path. 03.07.2013
  • Вы пытались открыть файл jar с помощью winrar (например) и проверить, находится ли внутри ваш файл txt? Возможно, вы не экспортируете его в пакет. 03.07.2013
  • Да, файлы txt находятся внутри jar-файла, я проверил. 03.07.2013
  • Он говорит, что getClassLoader() не определен для bam... 03.07.2013

Ответы:


1

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

Вы открываете InputStream ресурс с помощью Class.getResourceAsStream().

03.07.2013
  • Он говорит, что getClassLoader() не определен для bam 03.07.2013
  • В любом случае спасибо за предложение, я разобрался. Просто пропустите getClass() перед этим. 03.07.2013


  • 3

    Чтобы получить доступ к ресурсам внутри файла JAR, вам нужно использовать

    YourClass.getClassLoader().getResourceAsStream("info.txt")
    

    Таким образом, он будет искать внутри файла JAR (точнее, во всех местах пути к классам) файл как ресурс. Он будет работать как в Eclipse, так и при упаковке в виде JAR.

    03.07.2013

    4

    Я закончил тем, что использовал в классе

    getClass().getResourceAsStream("/info.txt"), который дает InputStream

    Затем я использую InputStreamReader и BufferedReader для чтения файла.

    / вот папка src. Все в этой папке будет собрано в папку bin в конце.

    Если у вас есть несколько исходных папок (папку можно сделать исходной, щелкнув правой кнопкой мыши и выбрав этот параметр в Eclipse), все исходные папки создаются в одну папку bin.

    Например, если у вас есть исходные папки

    sourceA
      foo_package/...
    sourceB
      bar_package/...
    

    тогда в корзине это будет

    bin (this is the "/")
      foo_package/... 
      bar_package/...
    

    Всем спасибо за ответы и вдохновения!

    03.07.2013

    5

    вы должны поместить свой текстовый файл рядом с файлом jar в папку jar

    это означает, что скопируйте ваш текстовый файл в папку с файлом jar, а не в файл jar

    03.07.2013
  • этот txt должен быть доставлен внутри пакета. То, что вы предлагаете, будет работать, но это не главное. 03.07.2013
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..