【问题标题】:.exist() - file does not exist, when using relative path [duplicate].exist() - 使用相对路径时文件不存在[重复]
【发布时间】:2022-01-27 22:18:22
【问题描述】:

编辑:如果您遇到了这个问题,那么您可能不熟悉这个概念 - 工作目录。

我不知道这是否特定于 IntelliJ IDEA 的当前工作目录,或者我不太了解相关文件的概念。我确实得出了一个解决我的问题的结论,但它给我留下了很多没有答案的东西,我不喜欢只记住一些东西,我想理解它。这就是我在这里问这个问题的原因,提前谢谢你。

假设你有

  1. 一个名为Main的类
  2. 一个名为text1.txt的文本文件

它们都位于文件夹src

Main 类中,您编写了以下代码

public class Main {

    public static void main(String[] args) {        
        // Scanner
        Scanner scanner = new Scanner(System.in);       
        // File object
        File myFile = new File("text1.txt");
        // Prints a String, that tells you if the file exists
        System.out.println("File exists = " + myFile.exists());
    }

}

Result: File exists = false

为什么会这样?

这个问题已经得到了很好的回答,但是,如果你觉得这对你来说还不够,那么请阅读下面的文章,它会更深入。

https://www.earthdatascience.org/courses/intro-to-earth-data-science/python-code-fundamentals/work-with-files-directories-paths-in-python/

【问题讨论】:

  • "它们都位于文件夹 "src"" - 好吧,那是你的问题。 text1.txt 文件需要驻留在工作目录中。请记住,当程序被导出时,src 的内容不会对您的程序可用,相反,在这种情况下(取决于构建系统和 IDE)它将成为嵌入资源
  • 添加到您的问题 - 如果您在检查文件是否存在之前写入文件,则从您的代码中可以解决此问题。
  • 这能回答你的问题吗? Java Cannot find file?

标签: java intellij-idea io relative-path file-exists


【解决方案1】:

绝对路径从文件系统根目录开始。将其与信件上的地址进行比较。邮递员知道将那封信投递到哪里。

相对路径不是目标地址。更像是 - 当你看到加油站时,左转。根据您从哪个方向来,您最终会在其他不同的位置。

回到计算机:相对路径是根据当前工作目录计算的。您可以通过检查从您的 java 程序中打印出来

How to get the current working directory in Java?

我通常编写代码来更清楚地了解事件。下面的代码不仅会告诉它是否找到了文件,还会让你知道它在哪里搜索它。

        // File object
        File myFile = new File("text1.txt");

        // Prints a String, that tells you if the file exists
        System.out.println("File "+myFile.getAbsolutePath()+" exists = " + myFile.exists());

【讨论】:

  • 因此,在仅使用文件名编写相对路径之前,我应该始终检查工作目录,因为根据 IDE 和其他内容,每种情况下可能会有所不同。此外,我不应该将工作目录与父目录相关联。另一种更快的解决方案是始终至少写入文件的父文件夹,例如“src/text1.txt”,如果我错了,请纠正我。
  • 我想你明白了。除了关于父文件夹的最后一部分之外的所有内容都是正确的。即使您使用 src/text1.txt 它也是一个相对路径,并且将使用当前工作目录。只是要清楚:相对路径还不错。他们有他们的价值。但你需要知道它们是相对的。
猜你喜欢
  • 2011-02-27
  • 2015-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 2011-01-23
  • 2013-09-13
相关资源
最近更新 更多