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

所以我2009年的新年决议是学习Java。 我最近收购了“Java for Dummies”,并使用Eclipse重新编写了本书中的示例代码。 无论如何,书中使用相对path的每个例子似乎都没有读取它应该读取的.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())); } } 

你可以在下面的屏幕截图中看到我已经包含这个文件。

图片不再可用

此外,我已经validation,当我生成一个Hankees.txt的副本与编译的.class文件放在bin文件夹中的应用程序。

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

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

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

感谢您的帮助!

你需要"src/Hankees.txt"

您的文件在源文件夹中,不被视为工作目录。\

或者,您可以将文件移动到项目的根目录,只需使用"Hankees.txt"

项目的构buildpath定义将源文件夹中的哪些资源复制到输出文件夹。 通常这被设置为包含所有文件。

新的运行configuration默认使用工程目录的工程目录,尽pipe这也可以改变。

这段代码显示了工作目录与从何处加载类的位置之间的区别:

 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”); 

而且你也应该使用File.separator ; 这是与系统有关的名称分隔符,为了方便起见,用string表示。

是的,为了path的目的,eclipse将顶层目录视为工作/根目录。

…只是想我会添加一些额外的信息。 我是新来的! 我想帮忙。

http://java.sun.com/javase/6/docs/api/java/io/File.html中进行解释; :

java.io下的类根据当前用户目录(通常是虚拟机启动的目录)parsing相对path名。

Eclipse将工作目录设置为顶级项目文件夹。

我有同样的问题。 如果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)) //<...> 

您可以始终使用以下命令获取运行时path:

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

这提供了关于在何处放置文件和资源的有价值的信息。