在 linux下 用 tar -zvf 包名.tar.gz 包文件1 包文件2
打相应的tar.gz包在windows 下显示压缩率为 31%
但是用java相应api打出来的tar.gz包在windows下显示压缩率为30% 所以用java相应api打出来的tar.gz比linux上打的tar.gz包小0.5M左右
现在想解决的问题是用java相应api打出来的包要和linux打的包一致,在java中用了不少方法都不行.怎样在java打tar.gz包时调整压缩率,就是怎样才能和linux打的tar.gz包一致。java代码如下:
使用的第三方apache commons-compress类包 /**
*
* @Title: pack
* @Description: 将一组文件打成tar包
* @param sources
* 要打包的原文件数组
* @param target
* 打包后的文件
* @return File 返回打包后的文件
* @throws
*/
public static File pack(File[] sources, File target) {
FileOutputStream out = null;
try {
out = new FileOutputStream(target);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
TarArchiveOutputStream os = new TarArchiveOutputStream(out);
for (int i = 0; i < sources.length; i++) {
String str = sources[i].toString();
File file = new File(str);
try {
System.out.println("file:" + file);
os.putArchiveEntry(new TarArchiveEntry(file));
FileInputStream temp = new FileInputStream(file);
IOUtils.copy(temp, os);
os.closeArchiveEntry(); } catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
if (os != null) {
try {
os.flush();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
} return target;
}
/**
* 再将tar包 压成tar.gz包
* <功能详细描述>
* @param destFile
* @see [类、类#方法、类#成员]
*/
private static void compressTarGz(String destFile)
{
File target = new File(destFile+".gz");
//GzipCompressorOutputStream gzipOut = null;
GZIPOutputStream gzipOut= null;
InputStream is2 = null;
try
{
//gzipOut = new GzipCompressorOutputStream(new FileOutputStream(target));//两个选一
gzipOut = new GZIPOutputStream(new FileOutputStream(target));
is2 = new FileInputStream(new File(destFile));
IOUtils.copy(is2, gzipOut);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}finally
{
IOUtils.closeQuietly(is2);
IOUtils.closeQuietly(gzipOut);
}
}
打相应的tar.gz包在windows 下显示压缩率为 31%
但是用java相应api打出来的tar.gz包在windows下显示压缩率为30% 所以用java相应api打出来的tar.gz比linux上打的tar.gz包小0.5M左右
现在想解决的问题是用java相应api打出来的包要和linux打的包一致,在java中用了不少方法都不行.怎样在java打tar.gz包时调整压缩率,就是怎样才能和linux打的tar.gz包一致。java代码如下:
使用的第三方apache commons-compress类包 /**
*
* @Title: pack
* @Description: 将一组文件打成tar包
* @param sources
* 要打包的原文件数组
* @param target
* 打包后的文件
* @return File 返回打包后的文件
* @throws
*/
public static File pack(File[] sources, File target) {
FileOutputStream out = null;
try {
out = new FileOutputStream(target);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
TarArchiveOutputStream os = new TarArchiveOutputStream(out);
for (int i = 0; i < sources.length; i++) {
String str = sources[i].toString();
File file = new File(str);
try {
System.out.println("file:" + file);
os.putArchiveEntry(new TarArchiveEntry(file));
FileInputStream temp = new FileInputStream(file);
IOUtils.copy(temp, os);
os.closeArchiveEntry(); } catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
if (os != null) {
try {
os.flush();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
} return target;
}
/**
* 再将tar包 压成tar.gz包
* <功能详细描述>
* @param destFile
* @see [类、类#方法、类#成员]
*/
private static void compressTarGz(String destFile)
{
File target = new File(destFile+".gz");
//GzipCompressorOutputStream gzipOut = null;
GZIPOutputStream gzipOut= null;
InputStream is2 = null;
try
{
//gzipOut = new GzipCompressorOutputStream(new FileOutputStream(target));//两个选一
gzipOut = new GZIPOutputStream(new FileOutputStream(target));
is2 = new FileInputStream(new File(destFile));
IOUtils.copy(is2, gzipOut);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}finally
{
IOUtils.closeQuietly(is2);
IOUtils.closeQuietly(gzipOut);
}
}
我解决不了这个问题呀,如果谁能解决我万分感谢呀
Java 中的 GZIP 与 linux 下的 都可以指定压缩率的。不一样很正常,压缩率高,压缩时间长,就看你要时间呢,还是要空间。