我试图创建一个基本的Java程序,允许用户创建文件和文件夹。
我希望所有这些都发生在一个文件夹中 里面 我的项目(图片附后),所以我有一些疑问......
"Test "这个文件夹的位置是否正确,如果不正确,我如何访问它?如你所见,它在com.company里,我应该把它移到src里吗?
当我试图检查是否存在时,它说 假的.
这是我的代码。
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 "实际上表示为一个路径为 "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
树,而你的项目通常不会存在于终端用户的计算机上。 (见上文)。
那么你应该怎么做呢?
没有一个正确的答案。
最佳答案取决于上下文。
根据你的图片,路径是错误的,你应该在src目录下检查。
File f = new File("src/Test");
System.out.println(f.exists());