Ошибка открытия ZIP-файла, созданного с использованием Java
Я создал небольшое приложение для чтения некоторых файлов с диска и архивирования его с помощью java.util.zip.ZipOutputStream. Он успешно создает ZIP-файл. Но в Windows, когда я пытаюсь открыть / извлечь его, я получаю сообщение об ошибке типа "Windows заблокировала доступ к этим файлам, чтобы помочь защитить ваш компьютер". Я архивирую только CSV-файлы. Но если я попытаюсь разархивировать, используя класс zipinputstream из самой java, он разархивируется правильно. Может ли кто-нибудь пролить свет на это.
С уважением, Anoop
5 ответов
Наконец я обнаружил проблему. Это было связано с пути. это действительно забавно, но если вы укажете абсолютный путь к файлам, которые будут заархивированы в zipoutputstream, эта ошибка произойдет. я пробовал с относительными путями и БИНГО!!! это сработало. Следовательно, я проделал некоторую работу, прежде чем архивировать и указал родительский файл на текущий рабочий каталог, а затем сжал. Спасибо всем за ответы.
Я знаю, что этот пост был несколько лет назад. Тем не менее, я впервые столкнулся с чем-то очень похожим, просто используя java.util.zip, и этот пост привел меня к решению проблемы.
Последний комментарий Anoop об абсолютных путях помог мне найти проблему. Поскольку я не видел ответа при поиске в нескольких сообщениях, я хотел опубликовать его здесь - фактически отвечая на последний вопрос Роланда:
Проблема заключалась в том, что я использовал ZipEntry (файл) с полным путем / файлом вместо относительного пути. Я не мог открыть полученный ZIP ни с одним из моих экземпляров ОС Windows. Тем не менее, я мог бы извлечь файл снова с помощью Java. Только когда я открыл почтовый индекс с 7zip, я понял проблему. Первая папка в моем файле result.zip была "D:". Мой каталог был длинным путем под моим диском D. Таким образом, при открытии моего файла "Results.zip", вот что я увидел бы после нажатия на дерево каталогов в zip-файле (из 7zip): Results.zip\D:\Apps\vertigo\instance5\runtime\myManager\discoveryResources\ данные
Каталог "data" фактически содержал все файлы / каталоги, которые я заархивировал.
Когда я удалил путь из каталога данных, файл Results.zip начал с "data" вместо "D:". И этот файл можно открыть в Windows 7, 2012 и т. Д.
Надеюсь, это поможет кому-то в будущем.
Спасибо, Крис
Вы видите защитную функцию Windows, защищающую вас и не указывающую на неверный файл. Скорее всего, потому что он находит ваш zip-файл странным. Может ли 7zip правильно открыть файл?
Процесс Java, который создал файл, все еще работает? Если да, возможно, он сохранил файл zip открытым, что в Windows обычно означает, что никакой другой процесс не может читать с него. Ваш код должен выглядеть так:
OutputStream os = new FileOutputStream("reports.zip");
try {
ZipOutputStream zos = new ZipOutputStream(os);
...
} finally {
os.close();
}
Попробуйте код, показанный в разделе " Проблема при сохранении и загрузке нескольких изображений в одном файле в OTN". Просто протестируйте код еще раз, и когда я дважды открою файл images.zip, Windows покажет содержимое.