我想要一个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)
它返回当前的工作目录.
Lau*_*ves 48
当前目录不是(必要).class文件所在的目录.它是进程的工作目录.(即:启动JVM时所在的目录)
您可以使用getResourceAsStream()从与.class文件相同的目录*中加载文件.这将为您提供一个InputStream,您可以使用InputStreamReader将其转换为Reader .
*请注意,这个"目录"实际上可能是一个jar文件,具体取决于加载类的位置.
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)
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 文件位于同一目录中。
如果您知道您的文件将位于您的类所在的位置,则该目录将位于您的类路径中。在这种情况下,您可以确定此解决方案将解决您的问题:
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)
| 归档时间: |
|
| 查看次数: |
167412 次 |
| 最近记录: |