Почему Java не может найти этот файл в 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 ответ

Хотя я не могу сказать вам точно, что не так, я могу сказать вам, как получить ответ.

Файл старый и устаревший. Он был частью Java 1.0, и многие его методы ненадежны по разным причинам, часто возвращая неинформативное магическое значение, такое как 0 или ноль, вместо того, чтобы выдавать исключение, которое фактически описывает природу сбоя.

Класс File был заменен на Path. Вы можете получить экземпляр Path с помощью Paths.get или File.toPath.

Если у вас есть путь, большинство операций над ним выполняется с помощью класса Files. В частности, вы, вероятно, хотите либо Files.exists, либо Files.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);
    }
}
Другие вопросы по тегам