我试图写一个程序通过args读取文本文件,但是当我运行它时,它总是说文件无法找到,即使我把它放在与我正在运行的main.java相同的文件夹中.有谁知道我的问题的解决方案或更好的阅读文本文件的方法?
不要使用相对路径java.io.File
.
它将变为相对于当前工作目录,这取决于您运行应用程序的方式,而应用程序又无法从应用程序内部进行控制.这只会导致便携性问题.如果从Eclipse内部运行它,路径将相对于/path/to/eclipse/workspace/projectname
.如果从命令控制台内部运行它,它将相对于当前打开的文件夹(即使您按绝对路径运行代码!).如果通过双击JAR来运行它,它将相对于JAR的根文件夹.如果你在网络服务器中运行它,它将相对于/path/to/webserver/binaries
.等等.
始终使用绝对路径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);
// ...
}
Run Code Online (Sandbox Code Playgroud)
要么
public MyClass() {
InputStream input = getClass().getResourceAsStream("filename.txt");
// ...
}
Run Code Online (Sandbox Code Playgroud)