我正在制作一个从特定位置读取文件的 java 应用程序。文件的位置在从中检索的文件夹中
getCanonicalPath().
我面临的问题是,当我在 Eclipse 中运行我的应用程序时,规范路径与 Java 博士看到的不同。所以,在将我的应用程序交付给客户端之前,我应该做什么以确保无论使用哪个 ide/命令提示符来运行应用程序,它都能看到文件。显然,在所有可能的文件夹中复制相同的文件以涵盖 getCanonicalPath 的不同可能性并不是一个好主意。
谢谢
我正在制作一个从特定位置读取文件的 java 应用程序。文件的位置在从中检索的文件夹中
getCanonicalPath().
我面临的问题是,当我在 Eclipse 中运行我的应用程序时,规范路径与 Java 博士看到的不同。所以,在将我的应用程序交付给客户端之前,我应该做什么以确保无论使用哪个 ide/命令提示符来运行应用程序,它都能看到文件。显然,在所有可能的文件夹中复制相同的文件以涵盖 getCanonicalPath 的不同可能性并不是一个好主意。
谢谢
解决方案之一是将这个文件放在你的类路径中并从你的类路径中加载它,代码如下
URL url = getClass().getClassLoader().getResource(path);
if(url != null) {
try {
return new File(url.toURI().getPath());
} catch (URISyntaxException e) {
return null;
}
}
如果此文件是配置文件,这是标准的。通常在标准的 java 项目布局中,您将其放在文件夹中src/main/resources
。
如果这更多的是一个数据文件,你应该把它的路径放在一个配置文件中,并有不同的配置,一个用于您的工作站,一个用于客户端机器上的生产。当然,在这种情况下,配置文件位于类路径中;)。
一个常见的解决方案是将文件放在类路径中的目录中。如果您使用 getResource 或 getResourceAsInputStream ,则无论在类路径中的何处提供该文件,您都可以找到该文件。如果你使用 maven,你可以确定类路径是如何设置的,而不管使用的是什么 IDE。
您应该始终ClassLoader
使用 API加载文件Test.class.getClassLoader().getResource(name)
,如Test.class.getClassLoader().getResourceAsStream(name)
更多信息可在此处获得