Java 在根目录下创建文件,奇怪的响应
这实际上不是一个问题,但我需要解释。我试图在C://驱动器下创建目录。所以,Java 在根目录下创建文件,奇怪的响应,java,file,Java,File,这实际上不是一个问题,但我需要解释。我试图在C://驱动器下创建目录。所以, try { File f_paz = new File("c://Ekap_Pazarlik_xml" + file_currentDate + "//"); File parent_z = f_paz.getParentFile(); if (null != parent_z) { parent_z.mkdirs
try {
File f_paz = new File("c://Ekap_Pazarlik_xml" + file_currentDate + "//");
File parent_z = f_paz.getParentFile();
if (null != parent_z) {
parent_z.mkdirs();
}
if (!f_paz.exists()) {
f_paz.createNewFile();
}
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
我试过了,它给了我一个“拒绝访问”的错误,所以我在网上尝试了所有的解决方案。什么也没发生
奇怪的是,我决定在后面加上“空格”
File f_paz = new File("c://Ekap_Pazarlik_xml" + file_currentDate + "// ");
here
就在“//”
之后,它开始工作了。我能像那样用板条箱装目录。我不知道为什么会这样。请给我解释一下。谢谢 f_paz.createNewFile()代码>将尝试创建新文件,而不是目录。许多Windows系统不允许您直接在C:
中创建文件,因此会出现异常
由于要创建目录而不是文件,请使用f_paz.mkdir()代码>取而代之。顺便说一句,你不需要结尾处的“//”
如果添加空格,即使用路径“C:/Ekap_xxx/”
,会发生什么情况?系统将看到一个路径,其文件名为空“
,父目录名为“Ekap\u xxx”
。现在parent_z
将引用“C:/Ekap_xxx”
,从而parent_z.mkdirs()代码>将创建目录“Ekap\u xxx”
。现在f_paz.exists()
将返回true,因为文件系统似乎认为仍然存在一个具有无效名称的文件(我必须寻找一些关于为什么会这样的信息,它隐藏在本机代码中)。“C:/Ekap_whatever/”
不是一个文件名,而是一个目录名。在末尾添加一个空格意味着文件名是一个空格,其余部分是其路径。Windows不允许您创建一个名称为空的文件(尽管它似乎无声地否认了这一点),因此您只能看到目录。尝试使用非空格字符而不是空格(例如,x
),您会看到在您的目录中创建了一个具有该名称的文件。我尝试将Dİdirectory装箱,而不是文件。为什么没有空间就不能接受?背后的逻辑是什么?我给出了文件的路径(path),它应该接受它。为什么我需要在末尾加一个空格?至少编译器应该给我一个正确的错误,这样我才能处理它。拒绝访问对于那个错误来说太奇怪了。我将把我的评论放在一个答案中,并添加更多信息。第二,我真的很高兴。等待你的回答。谢谢@Thomas@在大多数情况下,Java可以将文件路径的/
转换为\
。