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

Sao*_*obi 69 java

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

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

reader = new BufferedReader(new FileReader("myFile.txt"));
Run Code Online (Sandbox Code Playgroud)

不起作用.为什么?

我在Windows中运行它.

Joo*_*kka 72

尝试

System.getProperty("user.dir")
Run Code Online (Sandbox Code Playgroud)

它返回当前的工作目录.

  • 但它只返回直到项目根目录的路径.我们如何在java的main方法中获取当前包的路径 (6认同)
  • @TaimoorChangaiz,`System.getProperty("user.dir") + "\\src\\main\\java\\" + "Winners.txt"` (3认同)

Lau*_*ves 48

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

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


*请注意,这个"目录"实际上可能是一个jar文件,具体取决于加载类的位置.

  • +1.如果您正在运行Eclipse或Idea等IDE,则当前目录将是项目目录,而不是编译器输出. (14认同)
  • @piiligrim,取决于您的启动配置 (2认同)

Ton*_* Vu 29

上述答案都不适合我.这对我有用.

假设您的类名是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));
Run Code Online (Sandbox Code Playgroud)

  • 无法访问该文件。在 path.getFile 中给出 NullPointerException。 (3认同)

kat*_*ibs 14

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

----src
--------package1
------------myfile.txt
------------Prog.java
Run Code Online (Sandbox Code Playgroud)

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


小智 8

谢谢@Laurence Gonsalves,你的回答对我帮助很大。您当前的目录将是进程的工作目录,因此您必须提供从src目录开始的完整路径,如下所示:

public class Run {
public static void main(String[] args) {
    File inputFile = new File("./src/main/java/input.txt");
    try {
        Scanner reader = new Scanner(inputFile);
        while (reader.hasNextLine()) {
            String data = reader.nextLine();
            System.out.println(data);
            
        }
        reader.close();
    } catch (FileNotFoundException e) {
        System.out.println("scanner error");
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

}

虽然我的 input.txt 文件位于同一目录中。

在此输入图像描述


Joe*_*erg 5

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

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));
Run Code Online (Sandbox Code Playgroud)