Как найти поврежденный файл gz в Java
Я должен распаковать файл.gz, для которого я использую следующий код:
FileInputStream fis = null;
FileOutputStream fos = null;
GZIPInputStream gin = null;
try {
File file = new File(getPath(), zipName);
fis = new FileInputStream(file);
gin = new GZIPInputStream(fis);
File newFile = // some initialization related to path and name
fos = new FileOutputStream(getPath());
byte[] buf = new byte[1024];
int len;
while ((len = gin.read(buf)) > 0) {
fos.write(buf, 0, len);
}
gin.close();
fos.close();
//newFile is ready
} catch(IOException e){
// exception catch
}
Однако, когда файл gz клиента поврежден, я получаю следующую ошибку:
Exception in thread "main" java.io.EOFException: Unexpected end of ZLIB input stream
at java.util.zip.InflaterInputStream.fill(Unknown Source)
at java.util.zip.InflaterInputStream.read(Unknown Source)
at java.util.zip.GZIPInputStream.read(Unknown Source)
at java.util.zip.InflaterInputStream.read(Unknown Source)
Удивительно, но файл все еще распаковывается и хранится в локальном каталоге. Я не хочу, чтобы поврежденный файл был разархивирован или обработан вообще.
Одним из способов может быть удаление объекта newFile, когда предложение catch отмечено java.io.EOFException
, но это правильный подход? Могут быть и другие возможные исключения, когда файл не поврежден.
1 ответ
Ссылка @EJP
Если по какой-либо причине вы получаете какое-либо исключение IOException от поврежденного ввода до диска, летящего по орбите вокруг Плутона, вы должны удалить выходной файл и рассматривать операцию как неудачную. Вам не нужно думать дальше. - EJP