Java是一种跨平台的编程语言,可以用于许多应用程序的开发,在进行文件处理时也有多种方法可以用来实现。其中包括文件压缩和解压缩,这在许多场合下都是非常有用的。
文件压缩是指将一个大文件或目录压缩为单个压缩文件。这样的好处是占用更少的磁盘空间,并且使文件传输变得更加方便。Java中提供了ZipOutputStream和GZIPOutputStream类来完成文件压缩的任务。
ZipOutputStream类可以用于创建ZIP格式的压缩文件。下面是一段Java代码,演示如何使用ZipOutputStream类来创建一个名为“compressed.zip”压缩文件,并向其中添加两个文件:
代码语言:javascript复制import java.io.*;
import java.util.zip.*;
public class ZipExample {
public static void main(String[] args) {
byte[] buffer = new byte[1024];
try {
FileOutputStream fos = new FileOutputStream("compressed.zip");
ZipOutputStream zos = new ZipOutputStream(fos);
String file1 = "file1.txt";
String file2 = "file2.txt";
String[] files = {file1, file2};
for (int i=0; i<files.length; i ) {
FileInputStream fis = new FileInputStream(files[i]);
zos.putNextEntry(new ZipEntry(files[i]));
int length;
while ((length = fis.read(buffer)) > 0) {
zos.write(buffer, 0, length);
}
zos.closeEntry();
fis.close();
}
zos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
上述代码中,我们首先定义一个名为“compressed.zip”的输出文件流,并使用ZipOutputStream创建一个相应的输出流。接着,我们将需要压缩的两个文件存储到一维数组变量files中,每次循环对其中一个文件进行处理,在ZipOutputStream建立的压缩文件compressed.zip中添加这个文件,并关闭压缩项。最后,我们关闭整个压缩过程。
GZIPOutputStream类可以用于创建GZIP格式的压缩文件。下面是一段Java代码,展示如何使用GZIPOutputStream类来创建一个名为“compressed.gz”压缩文件:
代码语言:javascript复制import java.io.*;
import java.util.zip.*;
public class GZIPExample {
public static void main(String[] args) {
byte[] buffer = new byte[1024];
try {
FileInputStream fis = new FileInputStream("input.txt");
FileOutputStream fos = new FileOutputStream("compressed.gz");
GZIPOutputStream gzipOS = new GZIPOutputStream(fos);
int length;
while ((length = fis.read(buffer)) > 0) {
gzipOS.write(buffer, 0, length);
}
fis.close();
gzipOS.finish();
gzipOS.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
上述代码中,我们首先定义一个名为“input.txt”的输入文件流,并定义一个名为“compressed.gz”的输出文件流。然后,我们使用GZIPOutputStream创建一个相应的压缩输出流。在while循环中,我们将从输入文件input.txt读取数据,并将其写入压缩输出流compressed.gz中。最后,我们关闭整个压缩过程。
文件解压是指将一个已经压缩的文件恢复到原始状态。Java提供了ZipInputStream和GZIPInputStream类来完成文件解压缩的任务。
ZipInputStream类可以用于解压缩ZIP格式的文件,下面是一个演示程序:
代码语言:javascript复制import java.io.*;
import java.util.zip.*;
public class UnZipExample {
public static void main(String[] args) {
byte[] buffer = new byte[1024];
try {
ZipInputStream zis = new ZipInputStream(new FileInputStream("compressed.zip"));
ZipEntry zipEntry = zis.getNextEntry();
while (zipEntry != null) {
String fileName = zipEntry.getName();
FileOutputStream fos = new FileOutputStream(fileName);
int length;
while ((length = zis.read(buffer)) > 0) {
fos.write(buffer, 0, length);
}
fos.close();
zipEntry = zis.getNextEntry();
}
zis.closeEntry();
zis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
上述代码中,我们首先定义一个名为“compressed.zip”的ZipInputStream输入流,并获取该文件中的第一个条目(即压缩文件中的第一个文件)。接着,在while循环中,我们向文件系统写入读取自该输入流的文件,如果存在更多的条目,则重复进行此操作。最后,我们关闭整个解压缩过程。
GZIPInputStream类可以用于解压缩GZIP格式的文件,下面是一个演示程序:
代码语言:javascript复制import java.io.*;
import java.util.zip.*;
public class UnGZIPExample {
public static void main(String[] args) {
byte[] buffer = new byte[1024];
try {
GZIPInputStream gzipIS = new GZIPInputStream(new FileInputStream("compressed.gz"));
String fileName = "output.txt";
FileOutputStream fos = new FileOutputStream(fileName);
int length;
while ((length = gzipIS.read(buffer)) > 0) {
fos.write(buffer, 0, length);
}
gzipIS.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
上述代码中,我们首先定义一个名为“compressed.gz”的GZIPInputStream输入流,并将其读取到一个名为“output.txt”的输出流中。在while循环中,我们将读取自GZIP输入流gzipIS的数据写入名为“output.txt”的输出流中。最后,我们关闭整个解压缩过程。