Java - рекурсивно заполняющий массив каталогов - исключение nullpointerexeption при доступе к папке, защищенной системой [duplicate]

Многие другие ответы приведут к ошибкам / предупреждениям. Этот подход является относительно безумным, хотя вам все еще может понадобиться git branch -D branch_to_delete, если он не полностью слит с some_other_branch, например.

git checkout some_other_branch
git push origin :branch_to_delete
git branch -d branch_to_delete

Удаленная обрезка не нужна, если вы удалили удаленную ветвь. Он используется только для получения самых современных пультов, доступных на репо, которое вы отслеживаете. Я заметил, что git fetch добавит пульты, а не удалит их. Вот пример того, когда git remote prune origin действительно что-то предпримет:

Пользователь A выполняет описанные выше шаги. Пользователь B будет запускать следующие команды, чтобы увидеть самые современные удаленные ветви

git fetch
git remote prune origin
git branch -r
2
задан mKorbel 27 March 2013 в 09:39
поделиться

3 ответа

Сделайте это для скрытых файлов:

File root = new File(yourDirectory);
File[] files = root.listFiles(new FileFilter() {
    @Override
    public boolean accept(File file) {
        return !file.isHidden();
    }
});

Это не приведет к возврату скрытых файлов.

Что касается системных файлов, я считаю, что это концепция Windows и, следовательно, может не поддерживаться интерфейсом File, который пытается быть независимым от системы. Однако вы можете использовать команды командной строки, если они существуют.

Или используйте то, что @Reimeus имел в своем ответе.

Возможно, как

    File root = new File("C:\\");

    File[] files = root.listFiles(new FileFilter() {
        @Override
        public boolean accept(File file) {
            Path path = Paths.get(file.getAbsolutePath());
            DosFileAttributes dfa;
            try {
                dfa = Files.readAttributes(path, DosFileAttributes.class);
            } catch (IOException e) {
                // bad practice
                return false;
            }
            return (!dfa.isHidden() && !dfa.isSystem());
        }
    });

DosFileAttributes был введен в Java 7.

12
ответ дан Sotirios Delimanolis 28 August 2018 в 22:40
поделиться

Если вы пытаетесь перечислить все файлы в C:/, имейте в виду, что есть и другие файлы, которые не являются ни скрытыми, ни системными файлами, но они все равно не будут открываться, потому что им требуются специальные привилегии / разрешения. Итак:

String[] files = file.list();

if (files!=null) {
    for (String f : files) open(f);
}

Так что просто сравните, если массив имеет нулевое значение или нет, и спроектируйте свою рекурсию таким образом, чтобы она просто пропускала те файлы, массив которых для функции list() равен нулю.

private void nodes(DefaultMutableTreeNode top, File f) throws IOException {

if (f.isDirectory()) {
    File[] listFiles = f.listFiles();

    if (listFiles != null) {
        DefaultMutableTreeNode b1[] = new DefaultMutableTreeNode[listFiles.length];
        for (int i = 0; i < b1.length; i++) {
            b1[i] = new DefaultMutableTreeNode(listFiles[i].toString());
            top.add(b1[i]);
            File g = new File(b1[i].toString());
            nodes(b1[i], g);
        }
    }
}

Вот код, который я использовал для создания проводника оконных файлов с помощью jtree.

0
ответ дан helencrump 28 August 2018 в 22:40
поделиться

При запуске под Windows, Java 7 представил DosFileAttributes , который позволяет фильтровать системные и скрытые файлы. Это можно использовать в сочетании с FileFilter

Path srcFile = Paths.get("myDirectory");
DosFileAttributes dfa = Files.readAttributes(srcFile, DosFileAttributes.class);
System.out.println("System File? " + dfa.isSystem());
System.out.println("Hidden File? " + dfa.isHidden());
3
ответ дан Reimeus 28 August 2018 в 22:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: