Java,正在从当前目录读取文件?


80

我想要一个Java程序,该程序从当前目录(运行.class文件的同一目录)中读取用户指定的文件名。

换句话说,如果用户将文件名指定为“ myFile.txt”,并且该文件已经在当前目录中:

reader = new BufferedReader(new FileReader("myFile.txt"));

不起作用。为什么?

我在Windows中运行它。


1
这在Linux中也一样
Kasun Siyambalapitiya 16/12/21

Answers:


51

当前目录不是(不一定是).class文件所在的目录。它是进程的工作目录。(即:您启动JVM时所在的目录)

您可以从同一目录加载文件*与.class文件的getResourceAsStream() 。这将为您提供一个InputStream,您可以使用InputStreamReader将其转换为Reader 。


*请注意,根据加载类的位置,此“目录”实际上可能是jar文件。


15
+1。如果您正在运行Eclipse或Idea之类的IDE,则当前目录将是项目目录,而不是编译器输出。
Denis Tulskiy 09年

2
@piiligrim,取决于你的启动配置
托尔比约恩Ravn的安徒生

@DenisTulskiy我正在以与示例人员相同的方式在Eclipse上工作。我的仍然不工作,那是为什么?
windsound 2013年


33

以上答案均不适合我。这是对我有用的。

假设您的类名称为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));

1
无法访问该文件。在path.getFile中提供NullPointerException。
阿维克·乔杜里

这对我有用,谢谢。我建议您像这样编写第一个代码:URL路径= JAVA_FILE_NAME.class.getResource(“ myFile.txt”);
EX1T_ZER0

15

相对于src文件夹,您可以使用项目中的文件。如果您知道myfile.txt将位于哪个包或文件夹中,请说它位于

----src
--------package1
------------myfile.txt
------------Prog.java

您可以从Prog.java中将其路径指定为“ src / package1 / myfile.txt”


4

如果您知道文件将保存在您的类所在的位置,则该目录将位于您的类路径上。在这种情况下,您可以确定此解决方案将解决您的问题:

URL path = ClassLoader.getSystemResource("myFile.txt");
if(path==null) {
     //The file was not found, insert error handling here
}
File f = new File(path.toURI());

reader = new BufferedReader(new FileReader(f));

1

试试这个:

BufferedReader br = new BufferedReader(new FileReader("java_module_name/src/file_name.txt"));

0

尝试使用“。” 例如

File currentDirectory = new File(".");

这对我有用

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.