gpt4 book ai didi

Java 文件路径 f.exists() 始终返回 false

转载 作者:行者123 更新时间:2023-12-01 16:53:31 25 4
gpt4 key购买 nike

我正在尝试创建一个基本的 Java 程序,允许用户创建文件和文件夹。

我希望所有这一切都发生在我的项目内部的文件夹中(附图),所以我有一些疑问......

This would be my proyect tree

  1. 文件夹“Test”放置正确吗?如果不是,我该如何访问它?如您所见,它位于 com.company 内部,我应该将其移至 src 吗?

  2. 当我尝试检查是否存在时,它显示错误

这是我的代码:

public class Main {
Scanner input = new Scanner(System.in);

public static void main(String[] args) {
Main main = new Main();
main.init();
}

public void init(){
File f = new File("Test"); //Here i've tried "com"+File.separator+"company"+File.separator+"Test"
System.out.println(f.exists()); //output is false here

}
}

f.getParent() 表示 null。

但是当我尝试时: System.out.println(f.getAbsolutePath());它正确显示了整个路径。

使用相对路径的目的是因为我希望这段代码可以在任何计算机上运行。

感谢您的建议,希望有人能帮助我。

最佳答案

如果在 Java 中使用相对路径名,它们将相对于正在运行的应用程序的工作目录进行解析。因此您需要知道工作目录是什么。

当您在 IDE 中启动应用程序时,工作目录取决于 IDE 和启动器配置。但它通常是对应于项目顶部的文件系统目录。

另一件事需要注意的是,您看到的 src 文件夹很特殊。其中的条目通常不是文件和目录。它们通常是 Java 包和类。所以在文件系统中,“src”>“com.company”>“Main”实际上表示为路径为“src/com/company/Main.java”的文件。

这意味着将任意文件夹和文件放入“src”文件夹中是错误的。它会起作用......但它在概念上是错误的。数据文件不属于源代码树,当然也不属于您的应用程序编写的数据文件。 (当你开始使用源代码控制系统时,你会发现将数据文件写入源代码树会让你头疼。我不会详细说明......但我很确定你会后悔的。)

您正在做的事情在概念上是错误的另一件事是 Java 程序通常被编写为独立的东西。您的程序的用户不需要下载并安装 Intellij 或其他 IDE 并将您的项目加载到其中。他们只想从 JAR 文件运行它。在那个世界中,项目目录和“src”文件夹将不存在,并且像“src/Test”这样的硬连线相对路径将会出现问题。

<小时/>

所以让我们暂时忽略它并看看您的代码当前正在做什么

Is the folder "Test" correctly placed? if not how do i access to it? As you see, it's inside com.company, should I move it to src?

根据图片,Test文件夹(实际上是包)>><<在src文件夹中。

When I try to check if exists, it says false.

您的代码使用了错误的路径。将“Test”文件夹放置在您所在的位置(根据图片!),相对路径应该是“src/Test”,而不是“Test”或“com/company/Test”。

请注意,Windows 接受“/”或“\”作为文件分隔符,尽管“\”是常规使用的分隔符。

f.getParent() says null.

这是正确的。相对路径“Test”没有父部分。这是一个简单的文件/目录名称。

这样想吧。在解析具有相对路径的File之前,无法确定它相对于哪个目录。

But when I try: System.out.println(f.getAbsolutePath()); it shows correctly the whole path.

再说一遍,正确。

当您在相对的File上调用f.getAbsolutePath()时,运行时系统会在前面添加应用程序工作目录的路径,然后为您提供结果。

<小时/>

The point of using relative path is because I'd like this code to work on ANY computer.

该相对路径不适用于任何计算机。您使用的路径位于项目 src,并且您的项目通常不会存在于最终用户的计算机上。 (见上文。)

那么你应该做什么?

没有单一的正确答案。

  • 您可以将文件/目录放入用户的当前/工作目录中。
  • 您可以将文件/目录放入用户的目录中,或者主目录中的隐藏子目录中。 (这是 Linux 上的常见方法。)
  • 您可以将目录的路径名作为命令行参数
  • 您可以从环境变量中获取路径名
  • 您可以从应用程序特定的配置文件中获取路径名。

最佳答案取决于上下文。

关于Java 文件路径 f.exists() 始终返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61635725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com