Java 从工作目录上读取文件?

我想要一个 java 程序,读取用户指定的文件名从工作目录(相同的目录中。类文件运行)。

换句话说,如果用户指定文件名为“ myFile.txt”,而该文件已经在工作目录中:

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

不起作用,为什么?

我在橱窗里播放。

229512 次浏览

The current directory is not (necessarily) the directory the .class file is in. It's working directory of the process. (ie: the directory you were in when you started the JVM)

You can load files from the same directory* as the .class file with getResourceAsStream(). That'll give you an InputStream which you can convert to a Reader with InputStreamReader.


*Note that this "directory" may actually be a jar file, depending on where the class was loaded from.

Try

System.getProperty("user.dir")

It returns the current working directory.

If you know your file will live where your classes are, that directory will be on your classpath. In that case, you can be sure that this solution will solve your problem:

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));

None of the above answer works for me. Here is what works for me.

Let's say your class name is Foo.java, to access to the myFile.txt in the same folder as Foo.java, use this code:

URL path = Foo.class.getResource("myFile.txt");
File f = new File(path.getFile());
reader = new BufferedReader(new FileReader(f));

Files in your project are available to you relative to your src folder. if you know which package or folder myfile.txt will be in, say it is in

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

you can specify its path as "src/package1/myfile.txt" from Prog.java

Try this:

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

try using "." E.g.

File currentDirectory = new File(".");

This worked for me

Thanks @Laurence Gonsalves your answer helped me a lot. your current directory will working directory of proccess so you have to give full path start from your src directory like mentioned below:

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();
}
}

}

While my input.txt file is in same directory.

enter image description here