File.isDirectory()为同一目录返回true和false

时间:2017-07-13 15:32:28

标签: java windows directory

AUX是Windows中用于命名Windows中目录/文件的禁用关键字。我在下面编写了Java代码,它以两种不同的方式创建了这个目录,一个使用内置mkdir()方法,另一个使用exec()

当调用true时,指向同一目录的文件对象分别返回falseisDirectory()。我想了解这背后的原因。

代码

import java.io.*;
import java.nio.file.*;

class Test{

    public static void main(final String... arguments) throws Exception{

        File file=new File("\\\\.\\\\.\\C:\\Temp\\AUX");

        file.mkdir();
        System.out.println(file.isDirectory());
        file.delete();

        Runtime.getRuntime().exec("cmd /c md \\\\.\\\\C:\\Temp\\AUX");
        System.out.println(file.isDirectory());
        Runtime.getRuntime().exec("cmd /c rd \\\\.\\\\C:\\Temp\\AUX");

    }

}

输出

C:\Temp>javac Test.java

C:\Temp>java Test
true
false

1 个答案:

答案 0 :(得分:2)

如果使用Process.waitFor(),则可以确保在测试目录之前是否已创建目录

class Test{

    public static void main(final String... arguments) throws Exception{

        File file=new File("\\\\.\\\\.\\C:\\Temp\\AUX");

        file.mkdir();
        System.out.println(file.isDirectory());
        file.delete();

        Process p = Runtime.getRuntime().exec("cmd /c md \\\\.\\\\C:\\Temp\\AUX");
        p.waitFor();
        System.out.println(file.isDirectory());
        Runtime.getRuntime().exec("cmd /c rd \\\\.\\\\C:\\Temp\\AUX");

    }

}