请问在Java下如何实现文件压缩?有没有现成的接口或者压缩算法代码?多谢 see java.util.zip(?)it can deal with zip, gzip formatcompress or decompressgood luck! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 gzip格式很简单,在输出或输入流中嵌套gzip的IO类即可,例如在输出流中:PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(new BufferedOutputStream(new GZIPOutputStream(new FileOutputStream(s_out_file,true)))))); zip格式稍微麻烦一些,因为它支持多个文件。压缩的代码如下:/*Use: java ZipFiles zipFileName file1 file2 file3 file4 ...*/import java.io.*;import java.util.*;import java.util.zip.*;public class ZipFiles{ public static void main(String[] args) { int i=0; if((args.length<2)||(args.length>20)) { System.out.println("Use: java ZipFiles zipFileName file1 file2 file3 file4 ..."); System.out.println("files number can not be larger than 20!"); System.exit(0); } //取得待压缩的文件名 String s_zipName=args[0]; String[] s_files_will_be_ziped=new String[20]; int i_count_will_be_ziped_files=args.length-1; for(i=1;i<args.length;i++) { s_files_will_be_ziped[i-1]=args[i]; } //print System.out.println("below files will be ziped!"); for(i=0;i<i_count_will_be_ziped_files;i++) System.out.println("file---->"+s_files_will_be_ziped[i]); //压缩 System.out.println("compressing... ... ..."); System.out.println("compressed "+zip_files(s_files_will_be_ziped,i_count_will_be_ziped_files,s_zipName)+" files"); } //end main /* method zip_files() : version 1.2 2001/07/05 */ static int zip_files(String[] s_temp,int i_count_files,String s_ziped_fileName) { String s_current_path_fileName=""; String s_current_fileName=""; String[] s_fileNames=new String[100]; byte[] buffer=new byte[1024]; int bytesRead=0; int i=0; //先做一些校验工作---------------------------------------- try { if((i_count_files<=0)||(i_count_files>99)||(!(s_ziped_fileName.endsWith(".zip")))) return 0; int j=0; for(i=0;i<i_count_files;i++) { File f_test=new File(s_temp[i]); if(f_test.isFile()) { s_fileNames[j]=s_temp[i]; j++; } } i_count_files=j; } catch(Exception ee_345) { return 0; } //正式开始压缩-------------------------------------------- try { ZipOutputStream zip=new ZipOutputStream(new FileOutputStream(s_ziped_fileName)); for(i=0;i<i_count_files;i++) { s_current_path_fileName=s_fileNames[i]; FileInputStream in=new FileInputStream(s_current_path_fileName); File f_ttt=new File(s_current_path_fileName); s_current_fileName=f_ttt.getName(); ZipEntry entry=new ZipEntry(s_current_fileName); zip.putNextEntry(entry); while((bytesRead=in.read(buffer))!=-1) zip.write(buffer,0,bytesRead); in.close(); } //end for zip.close(); return i_count_files; } catch(Exception ex) { //System.out.println(ex); return 0; } } //end zip_files() } //end class ZipFiles 如何关闭没有名字的线程? 我想从键盘中输入一段数字,保存在一个字符数组中,再将里面的数字整体赋值给一个变量下面的程序为何不行啊 请教一个简单问题 使用swt做java应用程序开发.那多窗口是乍么实现的 《core java》上的一段代码,能编译,但是不能运行,一运行就抛出异常。 请教,在java中没有没 类似 window下的资源管理器 的控件??? 如何得知一个表是系统表 请教 一个关于date的奇怪问题 什么是对等体?谁能解释addNodify()的作用? 新年送分了 如何实现用Java来编写播放多媒体的小应用程序?? 小弟对Java及C#的一点看法-请大家指正!
/*
Use: java ZipFiles zipFileName file1 file2 file3 file4 ...
*/
import java.io.*;
import java.util.*;
import java.util.zip.*;public class ZipFiles
{
public static void main(String[] args)
{
int i=0;
if((args.length<2)||(args.length>20))
{
System.out.println("Use: java ZipFiles zipFileName file1 file2 file3 file4 ...");
System.out.println("files number can not be larger than 20!");
System.exit(0);
}
//取得待压缩的文件名
String s_zipName=args[0];
String[] s_files_will_be_ziped=new String[20];
int i_count_will_be_ziped_files=args.length-1;
for(i=1;i<args.length;i++)
{
s_files_will_be_ziped[i-1]=args[i];
}
//print
System.out.println("below files will be ziped!");
for(i=0;i<i_count_will_be_ziped_files;i++)
System.out.println("file---->"+s_files_will_be_ziped[i]);
//压缩
System.out.println("compressing... ... ...");
System.out.println("compressed "+zip_files(s_files_will_be_ziped,i_count_will_be_ziped_files,s_zipName)+" files");
} //end main
/* method zip_files() : version 1.2 2001/07/05 */
static int zip_files(String[] s_temp,int i_count_files,String s_ziped_fileName)
{
String s_current_path_fileName="";
String s_current_fileName="";
String[] s_fileNames=new String[100];
byte[] buffer=new byte[1024];
int bytesRead=0;
int i=0;
//先做一些校验工作----------------------------------------
try
{
if((i_count_files<=0)||(i_count_files>99)||(!(s_ziped_fileName.endsWith(".zip"))))
return 0;
int j=0;
for(i=0;i<i_count_files;i++)
{
File f_test=new File(s_temp[i]);
if(f_test.isFile())
{
s_fileNames[j]=s_temp[i];
j++;
}
}
i_count_files=j;
}
catch(Exception ee_345)
{
return 0;
}
//正式开始压缩--------------------------------------------
try
{
ZipOutputStream zip=new ZipOutputStream(new FileOutputStream(s_ziped_fileName));
for(i=0;i<i_count_files;i++)
{
s_current_path_fileName=s_fileNames[i];
FileInputStream in=new FileInputStream(s_current_path_fileName);
File f_ttt=new File(s_current_path_fileName);
s_current_fileName=f_ttt.getName();
ZipEntry entry=new ZipEntry(s_current_fileName);
zip.putNextEntry(entry);
while((bytesRead=in.read(buffer))!=-1)
zip.write(buffer,0,bytesRead);
in.close();
} //end for
zip.close();
return i_count_files;
}
catch(Exception ex)
{
//System.out.println(ex);
return 0;
}
} //end zip_files()
} //end class ZipFiles