在java中对rar文件进行操作,个人人为,资料还是比较少的。
最近用到,可以使用7zip来搞定,主要使用了sevenzip4j.jar和J7Zip.jar两个jar。
下面只是个压缩的例子,用到的时候,再补充上解压缩的例子。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import org.sevenzip4j.SevenZipArchiveOutputStream;
import org.sevenzip4j.archive.SevenZipEntry;
/**
*压缩生成7z格式工具类
*/
publicclass SevenZip {
privatestatic SevenZipzipInstance;
publicstatic Stringencoding ="utf-8";
private SevenZip() {}
publicstatic SevenZip getZip() {
if (zipInstance ==null) {
zipInstance =new SevenZip();
}
returnzipInstance;
}
/**
*
*将多个文件或者文件夹压缩成指定名称的zip压缩文件
*
*@param inputFile需压缩文件
*@param zipFilename输出文件及详细路径
*@throws IOException
*/
publicsynchronizedvoid zip(List<String> inputFile, String zipFilename)throws IOException {
SevenZipArchiveOutputStream out =new SevenZipArchiveOutputStream(
new FileOutputStream(zipFilename));
// out.setEncoding(encoding);
try {
for (String f : inputFile) {
File file =new File(f);
zip(file, out, file.isDirectory() ? file.getName() :"");
}
}catch (IOException e) {
throw e;
}finally {
out.finish();
out.close();
}
}
/**
*
*将多个文件或者文件夹压缩成指定名称的zip压缩文件
*
*@param inputFile需要压缩的文件
*@param zipFilename压缩文件路径
*@throws IOException
*/
publicsynchronizedvoid zip(File[] inputFile, String zipFilename)
throws IOException {
SevenZipArchiveOutputStream out =new SevenZipArchiveOutputStream(
new FileOutputStream(zipFilename));
try {
for (File f : inputFile)
zip(f, out, f.isDirectory() ? f.getName() :"");
}catch (IOException e) {
throw e;
}finally {
out.finish();
out.close();
}
}
/**
*
*将单个文件或者文件夹压为ZIP文件
*
*@param inputFile文件夹或者文件
*@param zipFilename压缩文件名称
*@throws IOException
*/
publicsynchronizedvoid zip(File inputFile, String zipFilename)
throws IOException {
SevenZipArchiveOutputStream out =new SevenZipArchiveOutputStream(
new FileOutputStream(zipFilename));
// out.setEncoding(encoding);
try {
zip(inputFile, out, inputFile.isDirectory() ? inputFile.getName():"");
}catch (IOException e) {
throw e;
}finally {
out.finish();
out.close();
}
}
/**
*
*压缩zip格式的压缩文件
*
*@param inputFile需压缩文件
*@param out输出压缩文件
*@param base结束标识
*@throws IOException
*/
privatesynchronizedvoid zip(File inputFile,
SevenZipArchiveOutputStream out, String base)throws IOException {
if (inputFile.isDirectory()) {
if (inputFile.list().length == 0) {
SevenZipEntry sevenEntry =new SevenZipEntry();
setSevenZipEntryAttributes(inputFile, sevenEntry);
sevenEntry.setName(base);
sevenEntry.setSize(0);
out.putNextEntry(sevenEntry);
}else {
base = base.length() == 0 ?"" : base + "/";
File[] inputFiles = inputFile.listFiles();
for (int i = 0; i < inputFiles.length; i++) {
zip(inputFiles[i], out, base + inputFiles[i].getName());
}
}
}else {
if (base.length() > 0) {
SevenZipEntry sevenEntry =new SevenZipEntry();
setSevenZipEntryAttributes(inputFile, sevenEntry);
sevenEntry.setName(base);
out.putNextEntry(sevenEntry);
copy(out, new FileInputStream(inputFile));
}else {
SevenZipEntry sevenEntry =new SevenZipEntry();
setSevenZipEntryAttributes(inputFile, sevenEntry);
out.putNextEntry(sevenEntry);
copy(out, new FileInputStream(inputFile));
}
}
}
privatestaticvoid setSevenZipEntryAttributes(File file,
SevenZipEntry sevenEntry) {
sevenEntry.setName(file.getName());
sevenEntry.setSize(file.length());
sevenEntry.setLastWriteTime(file.lastModified());
sevenEntry.setReadonly(!file.canWrite());
sevenEntry.setHidden(file.isHidden());
sevenEntry.setDirectory(file.isDirectory());
sevenEntry.setArchive(true);
sevenEntry.setSystem(false);
}
privatestaticvoid copy(OutputStream out, InputStream in)
throws IOException {
byte[] buf =newbyte[1024];
int i = 0;
while ((i = in.read(buf)) != -1) {
out.write(buf, 0, i);
}
}
publicstaticvoid main(String[] args)throws Exception {
String path = System.getProperty("user.dir");
String pathName = path +"\\output\\gznewzhaiyao0822";
// zip
SevenZip zip = SevenZip.getZip();
zip.zip(new File(pathName),"d:\\gznewzhaiyao0822.rar");
}
转:http://ligang6383.blog.163.com/blog/static/37729477201172422219656/