相对文件路径在 Eclipse 中如何工作?

2022-08-31 17:49:53

所以我2009年的新年决心是学习Java。我最近获得了“Java for Dummies”,并通过使用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的副本与编译的.class文件一起放置在bin文件夹中。

最后,如果我将第 12 行更改为以下内容,并将 Hankees.txt放在我的 C:\驱动程序编译并运行良好。

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

所以基本上,我的问题是我做错了什么?还是Eclipse以某种方式对此负责?

感谢您的任何和所有帮助!


答案 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/