Где разместить текстовый файл, который я хочу использовать в 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);
}
}
}
Ответы
Ответ 1
Спросите сначала: есть ли ваш файл внутренний компонент вашего приложения?
(Это обычно подразумевает, что он упакован внутри вашего JAR или WAR, если это веб-приложение, как правило, это некоторый файл конфигурации или статический ресурс, доступный только для чтения).
Если да, вы не хотите указывать абсолютный путь для файла. Но вы не хотите получать к нему доступ с относительным путем (как ваш пример), потому что Java предполагает, что этот путь относится к " текущему каталогу". Обычно предпочтительным способом для этого сценария является загрузка его относительно пути к классам.
Java предоставляет вам классLoader.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
в том же каталоге.
Ответ 2
Один путь для перехода -
Ответ 3
Предположим, что у вас есть проект под названием "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/
в начале, но используя относительный путь лучше, потому что вы можете перемещать проект, не беспокоясь о рефакторинге, если структура папки проекта то же самое.
Ответ 4
Просто создайте папку Files
под src
и поместите там свой файл.
Это будет выглядеть как src/Files/myFile.txt
Примечание:
В вашем коде вам нужно указать так: Files/myFile.txt
например.
getResource("Files/myFile.txt");
Поэтому, когда вы создаете проект и запускаете файл .jar, он должен работать.
Ответ 5
В зависимости от вашего имени пакета Java-класса вы, вероятно, на 4 или 5 уровней вниз по структуре каталогов.
Если ваш пакет Java-класса, например, com.stackoverflow.project, то ваш класс находится в src/com/stackoverflow/project.
Вы можете перемещать структуру каталогов с помощью нескольких ../
, или вы можете переместить текстовый файл в тот же пакет, что и ваш класс. Было бы легче переместить текстовый файл.
Ответ 6
Вероятно, вам стоит взглянуть на различные вкусы getResource в классе ClassLoader: http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ClassLoader.html
Ответ 7
MJB
Пожалуйста, попробуйте
-
В eclipse "Щелкните правой кнопкой мыши" в текстовом файле, который вы хотите использовать,
см. и скопируйте полный путь, хранящийся на HDD, как (если в UNIX "/home/sjaisawal/Space-11.4-template/provisioning/devenv/Test/src/testpath/testfile.txt" )
-
поместите этот полный путь и попробуйте.
-
если он работает, тогда class-path issue else GOK:)
Ответ 8
Если это простой проект, вы можете перетащить txt файл прямо в папку проекта. В частности, "папка проекта" будет папкой самого высокого уровня. Я попытался сделать это (для домашнего проекта, который я делаю), поместив txt файл в папку src, но это не сработало. Но, наконец, я решил включить его в файл проекта.
Хороший учебник для этого http://www.vogella.com/articles/JavaIO/article.html. Я использовал это как введение в i/o, и это помогло.
Ответ 9
Посмотрите на видео
Все, что вам нужно сделать, это выбрать ваш файл (при условии, что он будет такой же простой формой txt файла), а затем перетащить его в проект в Eclipse и затем отбросить его. Выберите "Копировать" вместо "Link", поскольку он более гибкий. Что это - я просто попробовал это.