Java 在根目录下创建文件,奇怪的响应

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

这实际上不是一个问题,但我需要解释。我试图在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();
            }
            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可以将文件路径的
/
转换为
\