Как относительные пути к файлам работают в Eclipse?
Итак, мое новое разрешение 2009 года-это изучение Java. Недавно я приобрел "Java для чайников" и следил за демо-кодом в книге, переписывая его с помощью Eclipse. Во всяком случае, каждый пример в книге, который использует относительный путь, похоже, не читает .txt-файл, из которого он должен читать.
вот пример кода:
import java.util.Scanner;
import java.io.File;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.GridLayout;
class TeamFrame extends JFrame {
public TeamFrame() throws IOException {
PlayerPlus player;
Scanner myScanner = new Scanner(new File("Hankees.txt"));
for (int num = 1; num <= 9; num++) {
player = new PlayerPlus(myScanner.nextLine(), myScanner.nextDouble());
myScanner.nextLine();
addPlayerInfo(player);
}
add(new JLabel());
add(new JLabel(" ------"));
add(new JLabel("Team Batting Aberage:"));
add(new JLabel(PlayerPlus.findTeamAverageString()));
setTitle("The Hankees");
setLayout(new GridLayout(11,2));
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setVisible(true);
}
void addPlayerInfo(PlayerPlus player) {
add(new JLabel(player.getName()));
add(new JLabel(player.getAverageString()));
}
}
и вы можете видеть на следующем снимке экрана я включил этот файл.
изображение больше не доступно
кроме того, я проверил, что при создании приложения, что копия Hankees.txt помещается в папку bin со скомпилированным файлом .файл класса.
наконец, если я изменю строку 12 на следующую и поместите Hankees.txt в корень моего диска C: программа компилируется и работает нормально.
Scanner myScanner = new Scanner(new File("C:Hankees.txt"));
Итак, в основном, мой вопрос в том, что я делаю неправильно? Или затмение ответственно за это в некотором роде?
Спасибо за все и вся помогите!
7 ответов:
вам нужно
"src/Hankees.txt"
ваш файл находится в исходной папке, которая не считается рабочим каталогом.\
или вы можете переместить файл в корневой директории вашего проекта и просто использовать
"Hankees.txt"
путь сборки проекта определяет, какие ресурсы из исходных папок копируются в выходные папки. Обычно это включает в себя все файлы.
новые конфигурации запуска по умолчанию используют каталог проекта для рабочего каталога, хотя это также может быть изменено.
этот код показывает разницу между рабочим каталогом и местоположением, из которого был загружен класс:
public class TellMeMyWorkingDirectory { public static void main(String[] args) { System.out.println(new java.io.File("").getAbsolutePath()); System.out.println(TellMeMyWorkingDirectory.class.getClassLoader().getResource("").getPath()); } }
выход скорее всего будет что-то например:
C:\your\project\directory /C:/your/project/directory/bin/
Это действительно похоже на другой вопрос. как я должен загружать файлы в мое приложение Java?
Как я должен загрузить мои файлы в мое приложение Java?
вы не хотите загрузить свои файлы в:
C:\your\project\file.txt
это плохо!
вы должны использовать getResourceAsStream.
InputStream inputStream = YourClass.class.getResourceAsStream(“file.txt”);
и также вы должны использовать .сепаратор; который зависит от системы имя-разделитель символов, представленный в виде строки для удобства.
да, eclipse видит верхний каталог как рабочий / корневой каталог, для целей путей.
...просто подумал, что я добавлю дополнительную информацию. Я здесь новенькая! Я бы хотел помочь.
перефразируя из http://java.sun.com/javase/6/docs/api/java/io/File.html:
классы под
java.io
разрешить относительные пути к текущему каталогу пользователя, который обычно является каталогом, в котором была запущена виртуальная машина.Eclipse устанавливает рабочий каталог в папку проекта верхнего уровня.
У меня такая же проблема. Если ваш класс и Hankees.тогда у txt есть один каталог в вашем проекте, я нахожу следующее - Не так уж плохо.
import java.net.URL; //<...> URL url = YourClass.class.getClassLoader().getResource("Hankees.txt"); String filesPathAndName = url.getPath(); Scanner myScanner = new Scanner(new File(filesPathAndName)) //<...>