请勿在中使用相对路径
java.io.File。
它将变成相对于当前工作目录的,这取决于您如何运行应用程序,而该方法又是无法从应用程序内部进行控制的。这只会导致可移植性麻烦。如果从Eclipse内部运行,则该路径将相对于
/path/to/eclipse/workspace/projectname。如果从命令控制台内部运行它,它将相对于
当前
打开的文件夹(即使您按绝对路径运行代码!)。如果通过双击JAR来运行它,它将相对于JAR的根文件夹。如果您在网络服务器上运行它,它将相对于
/path/to/webserver/binaries。Etcetera。
始终在中使用绝对路径
java.io.File,没有任何借口。
为了获得最佳的可移植性并减少绝对路径的麻烦,只需将文件放在运行时类路径覆盖的路径中(或将其路径添加到运行时类路径中)。这样,您可以通过来获取文件
Class#getResource()或通过来获取文件的内容
Class#getResourceAsStream()。如果它与当前类位于同一文件夹(包)中,则它已经在类路径中。要访问它,只需执行以下操作:
public MyClass() { URL url = getClass().getResource("filename.txt"); File file = new File(url.getPath()); InputStream input = new FileInputStream(file); // ...}要么
public MyClass() { InputStream input = getClass().getResourceAsStream("filename.txt"); // ...}


