У меня есть кусок кода, который использует алгоритм deflate
для сжатия файла:Java 7 сдувания Файлы
public static File compressOld(File rawFile) throws IOException
{
File compressed = new File(rawFile.getCanonicalPath().split("\\.")[0]
+ "_compressed." + rawFile.getName().split("\\.")[1]);
InputStream inputStream = new FileInputStream(rawFile);
OutputStream compressedWriter = new DeflaterOutputStream(new FileOutputStream(compressed));
byte[] buffer = new byte[1000];
int length;
while ((length = inputStream.read(buffer)) > 0)
{
compressedWriter.write(buffer, 0, length);
}
inputStream.close();
compressedWriter.close();
return compressed;
}
Однако, я не доволен OutputStream
копирования цикла, так как это «устаревшие» способ запись в потоки. Вместо этого я хочу использовать метод с Java 7
API, такие как Files.copy
:
public static File compressNew(File rawFile) throws IOException
{
File compressed = new File(rawFile.getCanonicalPath().split("\\.")[0]
+ "_compressed." + rawFile.getName().split("\\.")[1]);
OutputStream compressedWriter = new DeflaterOutputStream(new FileOutputStream(compressed));
Files.copy(compressed.toPath(), compressedWriter);
compressedWriter.close();
return compressed;
}
Последний метод, однако, не работает правильно, сжатый файл испорчен и только несколько байт копируются. Как так?
Нет ничего «устаревшего» о вашей первой части кода. Он по-прежнему работает. Здесь нет ничего плохого. Неясно, что вы спрашиваете, и почему. – EJP