Java文件路径f.exces()总是返回false。

问题描述 投票:0回答:2

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

我希望所有这些都发生在一个文件夹中 里面 我的项目(图片附后),所以我有一些疑问......

这将是我的项目树

  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 io relative-path
2个回答
0
投票

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

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

另外需要注意的是 src 你看到的文件夹是特殊的。 其中的条目通常不是文件和目录。 而是典型的Java包和类。 所以在文件系统中,"src" > "com.company" > "Main "实际上表示为一个路径为 "srccomcompanyMain.java "的文件。

这意味着把任意文件夹和文件放到 "src "文件夹中是有点错误的。 它可以工作......但在概念上是错误的。 数据文件不属于源代码树,当然也不属于你的应用程序编写的数据文件。 (而当你开始使用源码控制系统时,你会发现把数据文件写入你的源码树会让你很头疼。 我不会去细说......但我很肯定,你会发现 后悔了)。)

你所做的另一件事在概念上是错误的,那就是Java程序是 通常 编写成自由的东西。 你的程序的用户不应该需要下载和安装Intellij或其他IDE,然后把你的项目加载进去。 他们只想从一个JAR文件中运行它。 在这种情况下,项目目录和 "src "文件夹将不存在,而像 "srcTest "这样的硬连接相对路径将是有问题的。


所以让我们暂时忽略这一点,看看你的代码目前在做什么

"Test "这个文件夹的位置是否正确,如果不正确,我如何访问它?如你所见,它在com.company里面,我应该把它移到src里面吗?

根据图示, "测试 "文件夹的位置是正确的吗? Test 文件夹(实际上是包)>>是<<在 src 文件夹。

当我尝试检查是否存在时,它说false。

你的代码使用了错误的路径。 在你有 "Test "文件夹的地方(根据图片!),相对路径应该是 "srcTest",而不是 "Test "或 "comcompanyTest"。

请注意,Windows接受""或"\"将工作作为一个文件分隔符,即使"\"是什么是传统的使用。

f.getParent()null.

这是正确的。 相对路径 "Test "没有父级部分。 它是一个简单的文件目录名。

可以这样想。 直到一个 File 带相对路径的是 决心,不能确定它是相对于什么目录。

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

同样,正确。

当你调用 f.getAbsolutePath() 相对 File运行时系统会预先输入应用程序工作目录的路径,然后给出结果。


使用相对路径是因为我希望这段代码能在任何一台电脑上工作。

相对路径不会在任何一台计算机上工作。 你使用的路径是 您项目的 src 树,而你的项目通常不会存在于终端用户的计算机上。 (见上文)。

那么你应该怎么做呢?

没有一个正确的答案。

  • 你可以把文件目录放到用户的 当前 工作 目录。
  • 你可以把文件目录放到用户的 家里 目录,或主目录中的一个隐藏子目录。 这是在 Linux 上常见的方法)。
  • 你可以把目录的路径名作为一个命令行参数
  • 你可以从环境变量中获取路径名
  • 你可以从应用程序特定的配置文件中获取路径名。

最佳答案取决于上下文。


0
投票

根据你的图片,路径是错误的,你应该在src目录下检查。

File f = new File("src/Test");
System.out.println(f.exists());
© www.soinside.com 2019 - 2024. All rights reserved.