所以我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是否以某种方式对此负责?
感谢您的帮助!
答案 0 :(得分:75)
您需要"src/Hankees.txt"
您的文件位于源文件夹中,该文件夹不计入工作目录。\
或者您可以将文件移动到项目的根目录,然后使用"Hankees.txt"
答案 1 :(得分:7)
项目的构建路径定义源文件夹中的哪些资源被复制到输出文件夹。通常将其设置为包含所有文件。
新运行配置默认使用工作目录的项目目录,但也可以更改。
此代码显示工作目录与加载类的位置之间的区别:
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/
答案 2 :(得分:7)
这与另一个问题非常相似。 How should I load files into my Java application?
我应该如何将文件加载到Java应用程序中?
您不想要通过以下方式加载您的文件:
C:\your\project\file.txt
这是糟糕!
你应该使用getResourceAsStream。
InputStream inputStream = YourClass.class.getResourceAsStream(“file.txt”);
你也应该使用 File.separator ;这是与系统相关的名称分隔符,为方便起见,表示为字符串。
答案 3 :(得分:5)
是的,eclipse将top目录视为工作/根目录,用于路径。
...只是想我会添加一些额外的信息。我是新来的!我想帮忙。
答案 4 :(得分:2)
从http://java.sun.com/javase/6/docs/api/java/io/File.html释义:
java.io
下的类解析当前用户目录的相对路径名,该目录通常是启动虚拟机的目录。
Eclipse将工作目录设置为顶级项目文件夹。
答案 5 :(得分:1)
import java.net.URL;
//<...>
URL url = YourClass.class.getClassLoader().getResource("Hankees.txt");
String filesPathAndName = url.getPath();
Scanner myScanner = new Scanner(new File(filesPathAndName))
//<...>
答案 6 :(得分:1)
您始终可以使用以下方式获取运行时路径:
String path = new File(".").getCanonicalPath();
这提供了有关放置文件和资源的位置的有价值信息。