【问题标题】:File.isDirectory() returns true and false for same DirectoryFile.isDirectory() 为同一目录返回 true 和 false
【发布时间】:2017-07-13 15:32:27
【问题描述】:

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

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

代码

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

【问题讨论】:

  • 尝试在Runtime.getRuntime().exec("cmd /c md \\\\.\\\\C:\\Temp\\AUX"); 之后添加Thead.sleep(); 语句,因为Windows 命令处理器可能需要几秒钟才能启动并执行命令。
  • 是的,它有效。谢谢。
  • 没问题,乐于助人。

标签: java windows directory


【解决方案1】:

如果你使用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");

    }

}

【讨论】:

  • 宁可“等 cmd 进程完成”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-05
  • 2015-02-22
  • 2015-10-03
  • 2013-09-18
  • 1970-01-01
  • 2017-07-29
  • 1970-01-01
相关资源
最近更新 更多