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

时间:2009-09-26 03:55:58

标签: java

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

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

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

不起作用。为什么呢?

我在Windows中运行它。

9 个答案:

答案 0 :(得分:70)

尝试

System.getProperty("user.dir")

它返回当前的工作目录。

答案 1 :(得分:47)

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

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


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

答案 2 :(得分:26)

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

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

答案 3 :(得分:8)

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

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

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

答案 4 :(得分: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));

答案 5 :(得分:2)

谢谢@Laurence Gonsalves,你的回答对我帮助很大。 您当前的目录将是 proccess 的工作目录,因此您必须从 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();
    }
}

}

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

enter image description here

答案 6 :(得分:1)

试试这个:

const images =[
  { uri: 'images1' }, 
  { uri: 'images2' }, 
  { uri: 'images3' }, 
  { uri: 'image4' }, 
  { uri: 'images5' }, 
];
const newImages = images.map(({ uri }) => ({
  source: { uri }
}));

console.log(newImages);

答案 7 :(得分:0)

尝试使用“。” 例如

File currentDirectory = new File(".");

这对我有用

答案 8 :(得分:-3)

这也有效:

Path file=Paths.get("Your file path");
InputStream is=Files.newInputStream(file);
BufferedReader br=new BufferedReader(new InputStreamReader(is));