用java实现对文件的gzip压缩、tar打包 大家好: 小弟刚参加工作不久,现在还处于实习阶段,用实现对文件夹下的文件进行gzip压缩后tar打包的程序。已经在网上找了好几天了,没什么进展,希望知道的大哥们能够帮小弟一个忙,感激不禁!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 package com.softeem.file;import java.io.*;import java.io.InputStream;import java.util.zip.*; /** * 对文件或者目录操作的类 * @version 1.0 * @author leno */public class FileUtil { private static void copy(File source, File target) throws IOException { File tar = new File(target, source.getName()); if (source.isDirectory()) { System.out.println("开始创建目录:" + tar.getPath()); tar.mkdir(); File[] fs = source.listFiles(); for (int i = 0; i < fs.length; i++) { copy(fs[i], tar); } } else { System.out.println("开始从" + source + "拷贝文件到" + tar.getPath()); InputStream is = new FileInputStream(source); OutputStream os = new FileOutputStream(tar); byte[] buf = new byte[1024]; int len = 0; while ((len = is.read(buf)) != -1) { os.write(buf, 0, len); } is.close(); os.close(); } } /** * 拷贝文件或者目录到某个指定的路径 * * @param source * 源文件或者目录 * @param target * 目标路径 * @throws IOException */ public static void copy(String source, String target) { File sour = new File(source); File tar = new File(target); try { copy(sour, tar); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static void delete(File file) { if (file.isDirectory()) { File[] fs = file.listFiles(); for (int i = 0; i < fs.length; i++) { delete(fs[i]); } file.delete(); } else { file.delete(); } } /** * 删除一个文件或者目录 * * @param file */ public static void delete(String path) { File file = new File(path); delete(file); } /** * 压缩文件或者目录到指定的路径 * * @param zipFileName * 目标路径 * @param inputPath * 被压缩的文件或者目录 */ public static void zip(String zipFileName, String inputPath) { File inputFile = new File(inputPath); ZipOutputStream out; try { out = new ZipOutputStream(new FileOutputStream(zipFileName)); zip(out, inputFile, inputFile.getName()); System.out.println("压缩完成!"); out.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static void zip(ZipOutputStream out, File f, String base) throws Exception { System.out.println("正在压缩:" + f.getName() + "... ..."); if (f.isDirectory()) { File[] fs = f.listFiles(); base += "/"; System.out.println("新建目录条目:" + f.getName()); out.putNextEntry(new ZipEntry(base)); // 生成相应的目录 for (int i = 0; i < fs.length; i++) { // 对本目录下的所有文件对象递归调用本方法 zip(out, fs[i], base + fs[i].getName()); } } else { System.out.println("新增文件条目:" + f.getName()); out.putNextEntry(new ZipEntry(base)); InputStream is = new FileInputStream(f); byte[] buf = new byte[1024]; int len = 0; while ((len = is.read(buf)) != -1) { out.write(buf, 0, len); } is.close(); } } /** * 解压缩zip文件到指定的路径 * * @param zipfile * zip格式压缩文件 * @param desPath * 目标路径 */ public static void unzip(String zipFile, String desPath) { // 建立输出流,用于将从压缩文件中读出的文件流写入到磁盘 OutputStream out = null; // 建立输入流,用于从压缩文件中读出文件 ZipInputStream is; try { is = new ZipInputStream(new FileInputStream(zipFile)); ZipEntry entry = null; while ((entry = is.getNextEntry()) != null) { System.out.println("正在解压缩:" + entry.getName() + "... ..."); File f = new File(desPath + "\\" + entry.getName()); if (entry.isDirectory()) { System.out.println("新建目录:" + f.getName()); f.mkdir(); } else { System.out.println("新增文件:" + f.getName()); // 根据压缩文件中读出的文件名称新建文件 out = new FileOutputStream(f); byte[] buf = new byte[1024]; int len = 0; while ((len = is.read(buf)) != -1) { out.write(buf, 0, len); } out.close(); } } is.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 创建新文件 * * @param path */ public static void createFile(String path) { File file = new File(path); try { file.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 创建新目录 * * @param path */ public static void createDir(String path) { File file = new File(path); file.mkdirs(); } /** * 剪切文件或者目录到某个指定的路径 * * @param source * 源文件或者目录 * @param target * 目标路径 * */ public static void cutTo(String source, String target) { File sourFile = new File(source); File tarFile = new File(target); if (sourFile.isFile()) { if (tarFile.isDirectory()) { sourFile.renameTo(tarFile); } } else { copy(source, target); delete(source); } } public static void main(String[] args) { // copy("E:\\w.txt", "E:\\a"); // delete("E:\\a"); // zip("E:\\a.zip", "E:\\b"); // unzip("E:\\a.zip", "E:\\b"); // createFile("E:\\a.txt"); // createDir("E:\\bb"); // cutTo("E:\\b", "D:\\"); }} Thinking in java 3rd 中IO读写一章有例子。 求一个10位以上的大整数相乘的java算法 在java中如何调用一个其它程序? 返回类型有对象么??类也有吗?? 新手问题 高手请进:Java新手求解八方块游戏问题 关于class.forName("类名").newInstance()的问题。 请问:java定义的数组的length属性放在哪里呢? 那可当jBuilder7? 请教 这个正则表达式该怎么写啊! vj和jbuilder有冲突? Core Java Volume I & II 最新第8版 全两卷 (附随书源码) swing中网格组布局问题
import java.io.InputStream;
import java.util.zip.*;
/** * 对文件或者目录操作的类 * @version 1.0 * @author leno */public class FileUtil { private static void copy(File source, File target) throws IOException { File tar = new File(target, source.getName()); if (source.isDirectory()) { System.out.println("开始创建目录:" + tar.getPath()); tar.mkdir(); File[] fs = source.listFiles(); for (int i = 0; i < fs.length; i++) { copy(fs[i], tar); } } else { System.out.println("开始从" + source + "拷贝文件到" + tar.getPath()); InputStream is = new FileInputStream(source); OutputStream os = new FileOutputStream(tar); byte[] buf = new byte[1024]; int len = 0; while ((len = is.read(buf)) != -1) { os.write(buf, 0, len); } is.close(); os.close(); } } /** * 拷贝文件或者目录到某个指定的路径 * * @param source * 源文件或者目录 * @param target * 目标路径 * @throws IOException */ public static void copy(String source, String target) { File sour = new File(source); File tar = new File(target); try { copy(sour, tar); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static void delete(File file) { if (file.isDirectory()) { File[] fs = file.listFiles(); for (int i = 0; i < fs.length; i++) { delete(fs[i]); } file.delete(); } else { file.delete(); } } /** * 删除一个文件或者目录 * * @param file */ public static void delete(String path) { File file = new File(path); delete(file); } /** * 压缩文件或者目录到指定的路径 * * @param zipFileName * 目标路径 * @param inputPath * 被压缩的文件或者目录 */ public static void zip(String zipFileName, String inputPath) { File inputFile = new File(inputPath); ZipOutputStream out; try { out = new ZipOutputStream(new FileOutputStream(zipFileName)); zip(out, inputFile, inputFile.getName()); System.out.println("压缩完成!"); out.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static void zip(ZipOutputStream out, File f, String base) throws Exception { System.out.println("正在压缩:" + f.getName() + "... ..."); if (f.isDirectory()) { File[] fs = f.listFiles(); base += "/"; System.out.println("新建目录条目:" + f.getName()); out.putNextEntry(new ZipEntry(base)); // 生成相应的目录 for (int i = 0; i < fs.length; i++) { // 对本目录下的所有文件对象递归调用本方法 zip(out, fs[i], base + fs[i].getName()); } } else { System.out.println("新增文件条目:" + f.getName()); out.putNextEntry(new ZipEntry(base)); InputStream is = new FileInputStream(f); byte[] buf = new byte[1024]; int len = 0; while ((len = is.read(buf)) != -1) { out.write(buf, 0, len); } is.close(); } } /** * 解压缩zip文件到指定的路径 * * @param zipfile * zip格式压缩文件 * @param desPath * 目标路径 */ public static void unzip(String zipFile, String desPath) { // 建立输出流,用于将从压缩文件中读出的文件流写入到磁盘 OutputStream out = null; // 建立输入流,用于从压缩文件中读出文件 ZipInputStream is; try { is = new ZipInputStream(new FileInputStream(zipFile)); ZipEntry entry = null; while ((entry = is.getNextEntry()) != null) { System.out.println("正在解压缩:" + entry.getName() + "... ..."); File f = new File(desPath + "\\" + entry.getName()); if (entry.isDirectory()) { System.out.println("新建目录:" + f.getName()); f.mkdir(); } else { System.out.println("新增文件:" + f.getName()); // 根据压缩文件中读出的文件名称新建文件 out = new FileOutputStream(f); byte[] buf = new byte[1024]; int len = 0; while ((len = is.read(buf)) != -1) { out.write(buf, 0, len); } out.close(); } } is.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 创建新文件 * * @param path */ public static void createFile(String path) { File file = new File(path); try { file.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 创建新目录 * * @param path */ public static void createDir(String path) { File file = new File(path); file.mkdirs(); } /** * 剪切文件或者目录到某个指定的路径 * * @param source * 源文件或者目录 * @param target * 目标路径 * */ public static void cutTo(String source, String target) { File sourFile = new File(source); File tarFile = new File(target); if (sourFile.isFile()) { if (tarFile.isDirectory()) { sourFile.renameTo(tarFile); } } else { copy(source, target); delete(source); } } public static void main(String[] args) { // copy("E:\\w.txt", "E:\\a"); // delete("E:\\a"); // zip("E:\\a.zip", "E:\\b"); // unzip("E:\\a.zip", "E:\\b"); // createFile("E:\\a.txt"); // createDir("E:\\bb"); // cutTo("E:\\b", "D:\\"); }}