我想要一个Java程序,该程序从当前目录(运行.class文件的同一目录)中读取用户指定的文件名。
换句话说,如果用户将文件名指定为“ myFile.txt”,并且该文件已经在当前目录中:
reader = new BufferedReader(new FileReader("myFile.txt"));
不起作用。为什么?
我在Windows中运行它。
Answers:
当前目录不是(不一定是).class文件所在的目录。它是进程的工作目录。(即:您启动JVM时所在的目录)
您可以从同一目录加载文件*与.class文件的getResourceAsStream() 。这将为您提供一个InputStream,您可以使用InputStreamReader将其转换为Reader 。
*请注意,根据加载类的位置,此“目录”实际上可能是jar文件。
尝试
System.getProperty("user.dir")
它返回当前的工作目录。
以上答案均不适合我。这是对我有用的。
假设您的类名称为Foo.java,要访问与Foo.java相同的文件夹中的myFile.txt,请使用以下代码:
URL path = Foo.class.getResource("myFile.txt");
File f = new File(path.getFile());
reader = new BufferedReader(new FileReader(f));