2015-03-31 9 views
1

Я использовал FileChannel и FileInputStream для простого копирования файлов с File fromFile в File toFile.NIO GZIP сжатие и копирование файлов

Код в основном так:

source = new FileInputStream(fromFile).getChannel(); 
destination = new FileOutputStream(toFile, false).getChannel(); // overwrite 
destination.transferFrom(source, 0, source.size()); 

где fromFile и toFile являются собственные File объекты. Теперь вместо копирования из fromFile я хотел сжать его содержимое с помощью GZIP (найдено в библиотеках Java), а затем скопировать на toFile. Также наоборот, когда я возвращаюсь обратно с toFile, я хотел бы также распаковать его.

мне было интересно, есть простой способ, как

source = new GZIPCompressInputStream(new FileInputStream(fromFile)).getChannel(); 

или

source = new GZIPDecompressInputStream(new FileInputStream(fromFile)).getChannel(); 

и все остальные кода остаются неизменными. Есть ли у вас какие-либо предложения по наиболее чистым решениям?

Спасибо ..

+0

Вы используете Java 7+? – fge

+0

Да Я использую Java 7+ – bozeng

+0

возможный дубликат [Чтение файла GZIP из FileChannel (Java NIO)] (http://stackoverflow.com/questions/3335969/reading-a-gzip-file-from-a-filechannel -java-nio) –

ответ

0

Вы можете обернуть FileInputStream в GZIPInputStream так:

InputStream input = new GZIPInputStream(yourCompressedInput);

Для сжатия при записи, вы должны использовать GZIPOutputStream.

Удачи.

+0

Но у этих оберток нет getChannels() right – bozeng

+1

Нет, вы бы использовали каналы для получения потока. Но опять же, этот вопрос является дубликатом http://stackoverflow.com/questions/3335969/reading-a-gzip-file-from-a-filechannel-java-nio. Вы можете найти ответ. –