通过Eclipse运行时Java无法找到文件

当我运行应从Eclipse中的文件读取的Java应用程序时java.io.FileNotFoundException,即使文件位于正确的目录中,我也会得到一个。我可以从命令行编译并运行应用程序;该问题仅在具有多个项目和应用程序的Eclipse中发生。是否需要更改运行配置或构建路径中的设置才能使其正确找到文件?

回答:

问题很可能是您的应用程序正在使用相对路径名。正如@BalusC所说,相对路径名可能会出现问题。但是IMO,当他说 _“您

在java.io内容中使用相对路径”_时,他走得太远了。

当应用程序使用(例如)FileInputStream(File)构造函数打开文件时,相对路径名将相对于“当前目录”进行解析,该过程在javadoc中针对的描述如下File.getAbsolutePath()

[…]否则,该路径名以系统相关的方式解析。在UNIX系统上,相对路径名通过针对当前用户目录解析而成为绝对路径。在Microsoft

Windows系统上,通过将相对路径名与由该路径名命名的驱动器的当前目录(如果有)进行解析来使它成为绝对路径。如果不是,则针对当前用户目录进行解析。

因此,我们立即发现,“当前目录”的概念在Windows和UNIX平台上具有不同的细微差别。第二个问题是,在纯Java中,您不能确切地确定当前目录是什么,并且您当然不能使用纯Java为当前JVM更改它。(当JVM启动时,“

user.dir”系统属性被设置为当前目录,但是 没有什么阻止应用程序更改该属性, 因此您不能完全依靠它。此外,更改“

user.dir”仅会更改空路径的解析方式,通常不是相对路径。)

那你该怎么办呢?

  • 一种选择是使用绝对路径名来引用文件。在(几乎)所有情况下,这都是可靠的,但是如果用户必须输入路径名,或者如果您需要避免硬连接(或配置)绝对路径名,则使用绝对路径名可能会出现问题。

  • 第二种选择是使用类路径相对路径名,并相对于应用程序的安装目录定位文件。如果这是您需要做的,那将起作用,但是如果您需要将a传递File给某些库方法,则会出现问题。如果您尝试查找用户的应用程序首选项,也无济于事。(通常,将用户首选项放入安装目录是一个错误…)

  • 第三种选择是相对于您从其他地方获得的某个绝对目录命名文件。例如new File(System.getProperty("home.dir"), "foo/bar");

  • 最后一个选择是使用相对路径名,并假设用户知道当前目录。对于用户从命令行运行的许多应用程序,这是正确的解决方案。

在Eclipse的特定情况下,有一个简单的解决方案。转到用于启动应用程序的“运行配置”,打开“参数”选项卡,然后单击“其他”单选按钮。然后输入绝对路径名作为启动的应用程序的工作目录。启动子JVM时,它将具有指定的工作目录作为其当前目录。

以上是 通过Eclipse运行时Java无法找到文件 的全部内容, 来源链接: utcz.com/qa/407154.html

回到顶部