为什么Java不能在System32中找到此文件?

时间:2015-07-09 18:17:25

标签: java io system32

所以我尝试删除System32文件夹中的文件夹,但java似乎无法找到它......

    File gwxFolder = new File("C:/Windows/System32/GWX");

    System.out.println(gwxFolder.getPath());
    if(gwxFolder.exists()){
        IO.deleteFolder(gwxFolder);
    } else {
        JOptionPane.showMessageDialog(null, "Can't find your folder.");
    }

1 个答案:

答案 0 :(得分:1)

虽然我无法准确地告诉你什么是错的,但我可能会告诉你如何得到答案。

java.io.File已经过时了。它是Java 1.0的一部分,由于各种原因,它的许多方法都不可靠,通常返回一个无法提供的魔术值,如0或null,而不是抛出实际描述失败性质的异常。

File类已替换为Path。您可以使用Paths.getFile.toPath获取路径实例。

获得路径后,大多数操作都使用Files类执行。特别是,您可能需要Files.existsFiles.isDirectory

您可能还想考虑使用Files.walkFileTree自行删除该目录,因此如果失败,您将获得有用且信息丰富的例外:

Path gwxFolder = Paths.get("C:\\Windows\\System32\\GWX");

if (Files.exists(gwxFolder)) {
    try {
        Files.walkFileTree(gwxFolder, new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult visitFile(Path file,
                                             BasicFileAtttributes attributes)
            throws IOException {
                Files.delete(file);
                return FileVisitResult.CONTINUE;
            }

            @Override
            public FileVisitResult postVisitDirectory(Path dir,
                                                      IOException e)
            throws IOException {
                if (e == null) {
                    Files.delete(dir);
                }
                return super.postVisitDirectory(dir, e);
            }
        });
    } catch (IOException e) {
        StringWriter stackTrace = new StringWriter();
        e.printStackTrace(new PrintWriter(stackTrace, true));
        JOptionPane.showMessageDialog(null, stackTrace);
    }
}