Прогулка по дереву файлов выдает ошибку, даже если файлы должны существовать

Я пытаюсь просмотреть zip-файл и распечатать все файлы, но по какой-то причине он выдает NoSuchFileException, как только переходит в любую подпапку.

    FileSystem fs = FileSystems.newFileSystem(Paths.get(folder.getRoot().getAbsolutePath(), "test.zip"), null);

    Files.walkFileTree(fs.getPath("/"), new SimpleFileVisitor<Path>() {
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attr) {
            System.out.println(file);
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult visitFileFailed(Path file, IOException exc) {
            System.err.println(exc);
            return FileVisitResult.CONTINUE;
        }

    });

Почему он вообще хочет туда попасть, если их не существует? Может ли кто-нибудь помочь мне решить эту проблему? Файлы на самом деле должны быть там, по крайней мере, когда тест выполняется вручную.


person XtremeBaumer    schedule 06.12.2017    source источник


Ответы (2)


Будьте особенно осторожны при использовании FileSystem реализаций, так как они особенно зависят от используемой вами JVM, и от ОС! См. Javadoc FileSystem

Очень хороший пример — ZipFileSystem. Его девичья фамилия com.sun.nio.zipfs.ZipFileSystem, но у IBM JRE есть собственная реализация com.ibm.ws.install.ni.framework.io.ZIPFileSystem. Также, например, из ZIP-файла вы не можете получить доступ к внутренним ZIP-файлам из-за структуры архива. Вы должны разархивировать его и смонтировать внутренний ZIP как еще один FileSystem. (Впоследствии, конечно, вы должны удалить их)

И, конечно же, см. этот ответ SO: вероятно, ваши ожидания неверны. Отладьте, где именно возникает исключение, и сопоставьте это с вашими ожиданиями.

person D. Kovács    schedule 06.12.2017
comment
мои ожидания правильные. мой вывод из архивирования показывает мне, что файлы были добавлены в архив, но я не могу получить к ним доступ - person XtremeBaumer; 06.12.2017

Если я выполняю этот код, он просто работает для меня:

import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.*;
import java.util.zip.*;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        try (ZipFile zipFile = new ZipFile("logs\\subfolder\\subsubfolder\\logs.zip")) {
            zipFile.stream()
               .map(ZipEntry::getName)
               .forEach(System.out::println);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }




//         Path fs = FileSystems.getDefault().getPath("logs", "");
//
//         System.out.println(fs.toAbsolutePath());
//
//         SimpleFileVisitor<Path> sfv = new SimpleFileVisitor<Path>() {
//              @Override
//              public FileVisitResult visitFile(Path file, BasicFileAttributes attr) {
//                  System.out.println(file.toAbsolutePath());
//                  return FileVisitResult.CONTINUE;
//              }
//
//              @Override
//              public FileVisitResult visitFileFailed(Path file, IOException exc) {
//                  System.err.println(exc);
//                  return FileVisitResult.CONTINUE;
//              }
//
//          };
//         
//         try {
//              Files.walkFileTree(fs, sfv);
//         } catch (IOException e) {
//             // TODO Auto-generated catch block
//             e.printStackTrace();
//         }

    }

}

это изображение структуры каталогов проекта в eclipse: введите здесь описание изображения

В каталоге журналов есть файл с именем access.log.

и это мой вывод консоли:

access.log
Microsoft Access Database (neu).accdb
Microsoft Excel-Arbeitsblatt (neu).xlsx
test/Microsoft Access Database (neu).accdb
test/Microsoft Excel-Arbeitsblatt (neu).xlsx

Все файлы, находящиеся в Zip и его подпапках.

Список каталогов .zip без извлечения

person code1x1.de    schedule 06.12.2017
comment
ну, это не внутри zip или любого другого архива. при входе в любую подпапку выдает ошибку - person XtremeBaumer; 06.12.2017
comment
Вы имели в виду содержимое zip-файла или только подпапки? - person code1x1.de; 06.12.2017
comment
я хочу список файлов внутри моего почтового индекса, а также подпапки внутри почтового индекса - person XtremeBaumer; 06.12.2017