java - 为什么读取文件时必须输入完整路径?
问题描述
我是 Java 新手,来自 C++ 背景。我编写了一个非常简单的代码来测试文件读取。我有一个名为“input.txt”的输入文件,它与名为“Main.java”的主文件位于同一个文件中。但是,当我尝试使用名称“input.txt”创建 File 对象的新实例时,它找不到该文件并且 file.exists() 返回 false。当我改为输入完整路径名时,它确实找到了文件。代码如下所示:
public static void main(String[] args) throws FileNotFoundException
{
// File file = new File("C:/Users/josep/OneDrive/Documents/java/input.txt"); //This works
File file = new File("input.txt"); //why won't this work?
if( file.exists() )
{
System.out.println("File exists");
}
else
{
System.out.println("Doesn't exist"); //this prints out.
}
Scanner input = new Scanner(file);
String str = input.nextLine();
System.out.println("Str: " + str);
input.close();
}
}
我在这里做错了吗,因为我不明白为什么我不能只输入文件名而不是完整路径。在 C++ 中,如果文件在同一个文件夹中,我可以输入文件名,所以我很困惑为什么这在这里不起作用。下面是我得到的输出:
Doesn't exist
Exception in thread "main" java.io.FileNotFoundException: input.txt (The system cannot find the file specified)
at java.base/java.io.FileInputStream.open0(Native Method)
at java.base/java.io.FileInputStream.open(FileInputStream.java:211)
at java.base/java.io.FileInputStream.<init>(FileInputStream.java:153)
at java.base/java.util.Scanner.<init>(Scanner.java:639)
at Main.main(Main.java:22)
谁能帮我理解发生了什么?任何帮助将不胜感激。
解决方案
您可以看到路径解析到的位置(将是系统属性“user.dir”中保存的目录),如下所示:
System.out.println(Path.of("index.txt").toRealPath());
推荐阅读
- latex - 附属机构和通讯作者评论作为乳胶文章的脚注
- spring - 方法参数类型字符串所需的请求参数“图像”不存在
- angular - 谷歌登录后 Angular 导航到主页
- node.js - 在 React/Node PWA 中检索当前的 ssid/wifi 名称 - 可能吗?
- scala - Scala中的上下文绑定
- uml - 当一个类从多个具有 UML 中的分类器行为的类继承时,它应该如何表现?
- javascript - 如何正确捕获错误并将信息添加到错误中
- apache-kafka - NestJS / Kafka - 自动重试不会在指定次数停止
- android - 推广到生产,跳过应用审查?
- node.js - npm config "node-version" 到底是做什么的?