我想要一个java程序,它从当前目录(运行.class文件的同一目录)中读取用户指定的文件名。
换句话说,如果用户将文件名指定为“myFile.txt”,并且该文件已在当前目录中:
reader = new BufferedReader(new FileReader("myFile.txt"));
不起作用。为什么呢?
我在Windows中运行它。
答案 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 文件在同一目录中。
答案 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));