Подтвердить что ты не робот

Как работают относительные пути к файлу в 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 с скомпилированными файлами .class.

Наконец, если я сменил строку 12 на следующее и поместил Hankees.txt в корень моего диска C: \, программа компилируется и работает нормально.

Scanner myScanner = new Scanner(new File("C:\\Hankees.txt"));

Итак, в основном, мой вопрос в том, что я делаю неправильно? Или Eclipse отвечает за это в некотором роде?

Спасибо за любую помощь!

4b9b3361

Ответ 1

Вам нужно "src/Hankees.txt"

Ваш файл находится в исходной папке, которая не считается рабочим каталогом. \

Или вы можете переместить файл в корневую директорию вашего проекта и просто использовать "Hankees.txt"

Ответ 2

Путь сборки проекта определяет, какие ресурсы из ваших исходных папок копируются в ваши выходные папки. Обычно для этого установлено значение "Включить все файлы".

Новые конфигурации запуска по умолчанию используют каталог проекта для рабочего каталога, хотя это также можно изменить.

Этот код показывает разницу между рабочим каталогом и местом, где был загружен класс:

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/

Ответ 3

Это действительно похоже на другой вопрос. Как загрузить файлы в мое приложение Java?

Как загрузить мои файлы в мое приложение Java?

Вы не хотите загружать файлы:

C:\your\project\file.txt

это плохо!

Вы должны использовать getResourceAsStream.

InputStream inputStream = YourClass.class.getResourceAsStream("file.txt");

А также вы должны использовать File.separator; который является системно-зависимым символом-разделителем, представленным в виде строки для удобства.

Ответ 4

Да, eclipse видит верхний каталог как рабочий/корневой каталог для целей путей.

... просто подумал, что добавлю дополнительную информацию. Я здесь новенький! Я хотел бы помочь.

Ответ 5

Перефразируя из http://java.sun.com/javase/6/docs/api/java/io/File.html:

Классы под java.io разрешают относительные пути к текущему каталогу пользователя, который обычно является каталогом, в котором была запущена виртуальная машина.

Eclipse устанавливает рабочий каталог в папку проекта верхнего уровня.

Ответ 6

i имеет ту же проблему. Если у YourClass и 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))
//<...>

Ответ 7

Вы всегда можете получить свой путь выполнения, используя:

 String path = new File(".").getCanonicalPath();

Это дает ценную информацию о том, куда помещать файлы и ресурсы.