Java 如何读取具有不同规范路径的文件

Java 如何读取具有不同规范路径的文件,java,Java,我正在制作一个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,都可以确定类路径是如何设置的。

您应该始终使用API加载文件
ClassLoader
,如
Test.class.getClassLoader().getResource(name)
Test.class.getClassLoader().getresourceastream(name)
更多可用信息