Куда поместить текстовый файл, я хочу использовать в затмении?

Я должен считать текстовый файл, когда я запускаю свою программу. Я использую затмение и запустил новый проект 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);
    }
}

}

25
задан MJB 17 May 2010 в 19:17
поделиться

5 ответов

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

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

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

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

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

44
ответ дан 28 November 2019 в 18:31
поделиться

Один из возможных путей -

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

      URL url = Test. class.getClassLoader (). getResource ("myfile.txt");
    System.out.println (url.getPath ());
     ...
    
  3. Откройте
9
ответ дан 28 November 2019 в 18:31
поделиться

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

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

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

0
ответ дан 28 November 2019 в 18:31
поделиться

Предположим, у вас есть проект под названием "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/ в начале, но использование относительного пути лучше, потому что вы можете перемещать проект, не беспокоясь о рефакторинге, пока структура папок проекта остается прежней.

2
ответ дан 28 November 2019 в 18:31
поделиться

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

0
ответ дан 28 November 2019 в 18:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: