Куда поместить текстовый файл, который я хочу использовать в затмении? - PullRequest
25 голосов
/ 17 мая 2010

Мне нужно прочитать текстовый файл при запуске моей программы. Я использую Eclipse и начал новый проект Java. В папке моего проекта я получил папку «src» и стандартную «Системную библиотеку JRE» + staedteliste.txt ... Я просто не знаю, куда поместить текстовый файл. Я буквально перепробовал каждую папку, которую мог придумать .... Я не могу использовать "жестко закодированный" путь, потому что текстовый файл должен быть включен в мое приложение ...

Я использую следующий код для чтения файла, но получаю эту ошибку:

Error:java.io.FileNotFoundException:staedteliste.txt(No such file or directory)

public class Test {

ArrayList<String[]> values;

public static void main(String[] args) {
    // TODO Auto-generated method stub

    URL url = Test.class.getClassLoader().getResource("src/mjb/staedteliste.txt");
    System.out.println(url.getPath()); // I get a nullpointerexception here!
    loadList();
}

public static void loadList() {
    BufferedReader reader;
    String zeile = null;

    try {
        reader = new BufferedReader(new FileReader("src/mjb/staedteliste.txt"));
        zeile = reader.readLine();          

        ArrayList<String[]> values = new ArrayList<String[]>();

        while (zeile != null) {             
            values.add(zeile.split(";"));
            zeile = reader.readLine();
        }
        System.out.println(values.size());
        System.out.println(zeile);

    } catch (IOException e) {
        System.err.println("Error :"+e);
    }
}

}

Ответы [ 9 ]

44 голосов
/ 17 мая 2010

Сначала спросите себя: является ли ваш файл внутренним компонентом вашего приложения? (Обычно это означает, что он упакован внутри вашего JAR или WAR, если это веб-приложение; обычно это какой-то файл конфигурации или статический ресурс, только для чтения).

Если ответ положительный, вы не хотите указывать абсолютный путь для файла. Но вы также не хотите обращаться к нему с относительным путем (как ваш пример), потому что Java предполагает, что путь относится к " текущему каталогу ". Обычно предпочтительным способом для этого сценария является его загрузка относительно пути к классам .

Java предоставляет вам метод classLoader.getResource () для этого. И Eclipse (в обычной установке) предполагает, что src/ должен находиться в корне вашего пути к классам, поэтому после компиляции он копирует все в ваш выходной каталог (bin/), файлы java в скомпилированном виде (.class), остальное как есть.

Так, например, если вы поместите ваш файл в src/Files/myfile.txt, он будет скопирован во время компиляции в bin/Files/myfile.txt; и во время выполнения bin/ будет в (корне) вашего classpath. Итак, позвонив по номеру getResource("/Files/myfile.txt") (в некоторых его вариантах), вы сможете прочитать его.

Отредактировано : Кроме того, если ваш файл концептуально связан с Java-классом (например, некоторые com.example.MyClass имеют MyClass.cfg связанный файл конфигурации), вы можете использовать getResource () метод из класса и использовать относительный путь (ресурса): MyClass.getResource("MyClass.cfg"). Затем файл будет найден в пути к классам, но с предварительно добавленным пакетом классов. Таким образом, в этом случае вы обычно размещаете файлы MyClass.cfg и MyClass.java в одном каталоге.

9 голосов
/ 17 мая 2010

Один путь к

  1. Добавьте файл, с которым вы работаете, в classpath
  2. Используйте загрузчик ресурсов, чтобы найти файл:

        URL url = Test.class.getClassLoader().getResource("myfile.txt");
        System.out.println(url.getPath());
        ...
    
  3. Откройте его
3 голосов
/ 20 января 2012

Просто создайте папку Files в src и поместите туда свой файл. Это будет выглядеть как src/Files/myFile.txt

Примечание: В вашем коде нужно указать вот так Files/myFile.txt например,

getResource("Files/myFile.txt");

Поэтому, когда вы собираете свой проект и запускаете файл .jar, он должен работать.

2 голосов
/ 17 мая 2010

Предположим, у вас есть проект под названием «TestProject» в Eclipse, а папка рабочей области находится в E: / eclipse / workspace. Когда вы создаете проект Eclipse, ваш classpath будет e:/eclipse/workspace/TestProject. Когда вы пытаетесь прочитать «staedteliste.txt», вы пытаетесь получить доступ к файлу в e:/eclipse/workspace/TestProject/staedteliste.txt.

Если вы хотите создать отдельную папку для своего проекта, то создайте папку Files в TestProject и затем получите доступ к файлу с (относительный путь) /Files/staedteliste.txt. Если вы поместите файл в папку src, вы должны получить к нему доступ, используя /src/staedteliste.txt. Папка Files внутри папки src будет /src/Files/staedteliste.txt

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

0 голосов
/ 21 июня 2013

Посмотрите на это видео

Все, что вам нужно сделать, - это выбрать свой файл (при условии, что это тот же самый простой текстовый файл), затем перетащить его в проект в Eclipse и затем поместить в него. Выберите «Копировать» вместо «Ссылка», поскольку он более гибкий. Вот и все - я только что попробовал.

0 голосов
/ 27 января 2013

Если это простой проект, вы сможете перетащить текстовый файл прямо в папку проекта. В частности, «папка проекта» будет папкой самого высокого уровня. Я попытался сделать это (для проекта домашней работы, который я делаю), поместив файл txt в папку src, но это не сработало. Но в конце концов я решил поместить его в файл проекта.

Хорошим уроком для этого является http://www.vogella.com/articles/JavaIO/article.html. Я использовал это как введение в ввод-вывод, и это помогло.

0 голосов
/ 19 января 2012

MJB

Пожалуйста, попробуйте это

  1. В затмении "Щелкните правой кнопкой мыши" по текстовому файлу, который вы хотите использовать, просмотреть и скопировать полный путь, сохраненный на жестком диске, например (если в UNIX "/home/sjaisawal/Space-11.4-template/provisioning/devenv/Test/src/testpath/testfile.txt")

  2. поставь этот полный путь и попробуй.

  3. если это работает, тогда проблема пути к классу еще GOK:)

0 голосов
/ 17 мая 2010

Вам, вероятно, следует взглянуть на различные разновидности getResource в классе ClassLoader: http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ClassLoader.html

0 голосов
/ 17 мая 2010

В зависимости от имени пакета вашего класса Java, вы, вероятно, на 4 или 5 уровней ниже структуры каталогов.

Если ваш пакет классов Java, например, com.stackoverflow.project, то ваш класс находится в src / com / stackoverflow / project.

Вы можете либо переместиться вверх по структуре каталогов с несколькими ../, либо вы можете переместить текстовый файл в тот же пакет, что и ваш класс. Было бы легче переместить текстовый файл.

...