Как прочитать файл по пути, содержащему два или более zip-файлов между ними? - PullRequest
0 голосов
/ 29 сентября 2018

Предположим, у меня есть путь:

/ path / to / zipfile.zip / my / earfile.ear / plainfile

где zipfile.zip - это zip-файл, а earfile.earэто файл ухаНаличие этих сжатых файлов произвольно.

Я хочу иметь метод, который принимает этот тип пути в качестве параметра и возвращает входной поток или читатель для «обычного файла».

Я слышалчто это проще реализовать в Java 7, но я не знаю как.

Заранее спасибо.

1 Ответ

0 голосов
/ 08 октября 2018

Я нашел способ решить эту проблему с ограниченным условием, а именно: разрешено в точности два zip-файла.

public BufferedReader testNestedZipEntry() {
    try {
        // first zip file wrapped by ZipFile, which allows random access(just feed a path!) to find an entry
        ZipFile zipFile = new ZipFile("/path/to/zipfile.zip");
        // second zip file wrapped by ZipInputStream, which is sequential so you have to iterate over entries to find the one you need
        ZipEntry jarZipEntry = zipFile.getEntry("earfile.ear");
        ZipInputStream jarZipIn = new ZipInputStream(zipFile.getInputStream(jarZipEntry));
        ZipEntry curEntry = null;
        while( (curEntry=jarZipIn.getNextEntry()) != null){
            // getNextEntry() method "positions" the input stream to curEntry
            // this is the reason why we can achieve this without extracting the file out
            if(curEntry.getName().equals("plainfile")) {
                return new BufferedReader(new InputStreamReader(jarZipIn)); 
            }
        }
    }catch(Exception e) {
        e.printStackTrace();
    }
}

Совет для начинающих: все записи в zip-файле - это всефайлы, которые вы можете найти во всем zip-файле, а не только в корневом каталоге zip-файла.

...