it-swarm.com.ru

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

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

}

25
MJB

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

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

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 в одном каталоге.

44
leonbloy

Один из способов - это

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

        URL url = Test.class.getClassLoader().getResource("myfile.txt");
        System.out.println(url.getPath());
        ...
    
  3. Открой это
9
Greg Adamski

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

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

getResource("Files/myFile.txt");

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

2
Bernard Banta

Предположим, у вас есть проект под названием «TestProject» в Eclipse, и папка вашего рабочего пространства находится в E:/Eclipse/workspace. Когда вы создаете проект Eclipse, ваш путь к классу будет тогда 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
mr popo

MJB

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

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

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

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

0
sandejai

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

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

0
Mark

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

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

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

0
Gilbert Le Blanc

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

0
pdbartlett

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

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

0
Nenad Bulatovic