- 浏览: 4403947 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (163)
- 职场 && 心情 (22)
- Java/Basic (17)
- Java/Compression (7)
- Java/Security (20)
- Java/Maven (3)
- Java/Cache (11)
- Eclipse (4)
- Spring (19)
- ORM/Hibernate (2)
- ORM/iBatis (3)
- DB/NoSQL (11)
- DB/MySQL (7)
- DB/MS SQL Server (4)
- OS/Linux (11)
- OS/Mac (7)
- C/C++ (4)
- Server Architecture/Basic (13)
- Server Architecture/Distributed (17)
- Moblie/Andriod (2)
- WebService (3)
- Objective-C (1)
- Html (1)
- 设计模式 (1)
- Scala (0)
- Kafka (1)
最新评论
-
w47_csdn:
证书安装:在"浏览"选项中选择" ...
Java加密技术(九)——初探SSL -
w47_csdn:
spiritfrog 写道你好,我按照你的步骤,tomcat中 ...
Java加密技术(九)——初探SSL -
liuyachao111:
11楼说的对 用@ControllerAdvicepublic ...
Spring 注解学习手札(八)补遗——@ExceptionHandler -
irayslu:
作者你好, 我把你的源码放在jdk6, jdk7 中运行正常, ...
Java加密技术(五)——非对称加密算法的由来DH -
夏季浅忆-卖小子:
为什么不能解压rar格式的压缩包呢
Java压缩技术(三) ZIP解压缩——Java原生实现
在linux下,tar是一个归档命令。当然,如果配合gzip、bzip2就可以达到归档+压缩的效果!
我们通过tar获得归档压缩文件其实恰恰包含了归档和压缩两个操作,并且其操作次序也是先做归档操作,再做压缩操作! 通常我们忽略了归档的概念,将归档压缩文件简称为压缩文件!~
相关链接:
Java压缩技术(一) ZLib
Java压缩技术(二) ZIP压缩——Java原生实现
Java压缩技术(三) ZIP解压缩——Java原生实现
Java压缩技术(四) GZIP——Java原生实现
Java压缩技术(五) GZIP相关——浏览器解析
Java压缩技术(六) BZIP2——Commons实现
Java压缩技术(七) TAR——Commons实现
顺便复习一遍linux命令:
tar cf <file.tar> <file>将由文件<file>创建名为<file.tar>归档文件,同时保留原文件。
tar xf <file.tar>将由归档文件<file.tar>创建名为<file>的文件/目录,同时保留原文件。
对于归档压缩,需分为gzip和bzip2,相应的linux为:
gzip
tar czf <file.tar.gz> <file>将由文件<file>创建名为<file.tar.gz>归档压缩文件,同时保留原文件。
tar xzf <file.tar.gz>将由归档压缩文件<file.tar.gz>创建名为<file>的文件/目录,同时保留原文件。
bzip2
tar cjf <file.tar.bz2> <file>将由文件<file>创建名为<file.tar.bz2>归档压缩文件,同时保留原文件。
tar xjf <file.tar.bz2>将由归档压缩文件<file.tar.bz2>创建名为<file>的文件/目录,同时保留原文件。
今天的主角是Apache Commons Compress下用于Tar操作的三元干将
TarArchiveEntry 类似于Java 原生的ZipEntry,可以理解为Tar归档添加项。
TarArchiveOutputStream Tar归档输出流,用于归档。
TarArchiveInputStream Tar归档输入流,用于解归档。
至于jar,其实现方式与tar非常接近,我就不在这里废话了!
JarArchiveEntry 类似于Java 原生的ZipEntry,可以理解为Jar归档添加项。
JarArchiveOutputStream Jar归档输出流,用于归档。
JarArchiveInputStream Jar归档输入流,用于解归档。
读过Java压缩技术(二)和Java压缩技术(三)会发现,其实Tar的实现与Java原生的Zip实现方式基本上没有差别!
先说归档,依旧需要考虑待归档的对象是文件还是目录:
对于目录,需要区分空目录和包含文件的目录。
如果是空目录,只要简单追加一个归档项(TarArchiveEntry)即可,但注意其名字的结尾需要使用"/"作为区分目录的标识符(String PATH = "/";)。
如果是带有子文件的目录,则需要对其迭代归档:
最后,来看归档操作:
注意执行归档操作后,执行closeArchiveEntry()方法。
Tar解归档,与Zip解压相似,一样要遍历获得归档项:
最后,进行解归档:
文件探针用于构建父目录:
给出完整实现:
最后给出测试用例:
执行代码,来看下效果:
这是原始文件。
这是归档后的文件。
注意红框,这里没有经过任何压缩!
除了tar、zip,其实还有很多归档算法,如ar、jar、cpio。其实现方式,与上述内容较为接近。
至于压缩成*.tar.gz、*.tar.bz2,请朋友们参照前几篇内容!
完整实现见附件!
相关链接:
Java压缩技术(一) ZLib
Java压缩技术(二) ZIP压缩——Java原生实现
Java压缩技术(三) ZIP解压缩——Java原生实现
Java压缩技术(四) GZIP——Java原生实现
Java压缩技术(五) GZIP相关——浏览器解析
Java压缩技术(六) BZIP2——Commons实现
Java压缩技术(七) TAR——Commons实现
在你的输出流中添加前缀:
TarArchiveOutputStream stream = new TarArchiveOutputStream(...)
stream.setLongFileMode(TarArchiveOutputStream.LONGFILE_POSIX)
参考:https://stackoverflow.com/questions/32528799/when-i-tar-a-file-its-throw-exception-as-is-too-long-100-bytes-tararchiveo
和http://commons.apache.org/proper/commons-compress/tar.html#Long_File_Names
好问题!
commons compress目前只支持160个字符的文件名长度~
我们通过tar获得归档压缩文件其实恰恰包含了归档和压缩两个操作,并且其操作次序也是先做归档操作,再做压缩操作! 通常我们忽略了归档的概念,将归档压缩文件简称为压缩文件!~
相关链接:
Java压缩技术(一) ZLib
Java压缩技术(二) ZIP压缩——Java原生实现
Java压缩技术(三) ZIP解压缩——Java原生实现
Java压缩技术(四) GZIP——Java原生实现
Java压缩技术(五) GZIP相关——浏览器解析
Java压缩技术(六) BZIP2——Commons实现
Java压缩技术(七) TAR——Commons实现
顺便复习一遍linux命令:
tar cf <file.tar> <file>将由文件<file>创建名为<file.tar>归档文件,同时保留原文件。
tar xf <file.tar>将由归档文件<file.tar>创建名为<file>的文件/目录,同时保留原文件。
对于归档压缩,需分为gzip和bzip2,相应的linux为:
gzip
tar czf <file.tar.gz> <file>将由文件<file>创建名为<file.tar.gz>归档压缩文件,同时保留原文件。
tar xzf <file.tar.gz>将由归档压缩文件<file.tar.gz>创建名为<file>的文件/目录,同时保留原文件。
bzip2
tar cjf <file.tar.bz2> <file>将由文件<file>创建名为<file.tar.bz2>归档压缩文件,同时保留原文件。
tar xjf <file.tar.bz2>将由归档压缩文件<file.tar.bz2>创建名为<file>的文件/目录,同时保留原文件。
今天的主角是Apache Commons Compress下用于Tar操作的三元干将
TarArchiveEntry 类似于Java 原生的ZipEntry,可以理解为Tar归档添加项。
TarArchiveOutputStream Tar归档输出流,用于归档。
TarArchiveInputStream Tar归档输入流,用于解归档。
至于jar,其实现方式与tar非常接近,我就不在这里废话了!
JarArchiveEntry 类似于Java 原生的ZipEntry,可以理解为Jar归档添加项。
JarArchiveOutputStream Jar归档输出流,用于归档。
JarArchiveInputStream Jar归档输入流,用于解归档。
读过Java压缩技术(二)和Java压缩技术(三)会发现,其实Tar的实现与Java原生的Zip实现方式基本上没有差别!
先说归档,依旧需要考虑待归档的对象是文件还是目录:
/** * 归档 * * @param srcFile * 源路径 * @param taos * TarArchiveOutputStream * @param basePath * 归档包内相对路径 * @throws Exception */ private static void archive(File srcFile, TarArchiveOutputStream taos, String basePath) throws Exception { if (srcFile.isDirectory()) { archiveDir(srcFile, taos, basePath); } else { archiveFile(srcFile, taos, basePath); } }
对于目录,需要区分空目录和包含文件的目录。
如果是空目录,只要简单追加一个归档项(TarArchiveEntry)即可,但注意其名字的结尾需要使用"/"作为区分目录的标识符(String PATH = "/";)。
如果是带有子文件的目录,则需要对其迭代归档:
/** * 目录归档 * * @param dir * @param taos * TarArchiveOutputStream * @param basePath * @throws Exception */ private static void archiveDir(File dir, TarArchiveOutputStream taos, String basePath) throws Exception { File[] files = dir.listFiles(); if (files.length < 1) { TarArchiveEntry entry = new TarArchiveEntry(basePath + dir.getName() + PATH); taos.putArchiveEntry(entry); taos.closeArchiveEntry(); } for (File file : files) { // 递归归档 archive(file, taos, basePath + dir.getName() + PATH); } }
最后,来看归档操作:
/** * 数据归档 * * @param data * 待归档数据 * @param path * 归档数据的当前路径 * @param name * 归档文件名 * @param taos * TarArchiveOutputStream * @throws Exception */ private static void archiveFile(File file, TarArchiveOutputStream taos, String dir) throws Exception { TarArchiveEntry entry = new TarArchiveEntry(dir + file.getName()); entry.setSize(file.length()); taos.putArchiveEntry(entry); BufferedInputStream bis = new BufferedInputStream(new FileInputStream( file)); int count; byte data[] = new byte[BUFFER]; while ((count = bis.read(data, 0, BUFFER)) != -1) { taos.write(data, 0, count); } bis.close(); taos.closeArchiveEntry(); }
注意执行归档操作后,执行closeArchiveEntry()方法。
Tar解归档,与Zip解压相似,一样要遍历获得归档项:
/** * 文件 解归档 * * @param destFile * 目标文件 * @param tais * ZipInputStream * @throws Exception */ private static void dearchive(File destFile, TarArchiveInputStream tais) throws Exception { TarArchiveEntry entry = null; while ((entry = tais.getNextTarEntry()) != null) { // 文件 String dir = destFile.getPath() + File.separator + entry.getName(); File dirFile = new File(dir); // 文件检查 fileProber(dirFile); if (entry.isDirectory()) { dirFile.mkdirs(); } else { dearchiveFile(dirFile, tais); } } }
最后,进行解归档:
/** * 文件解归档 * * @param destFile * 目标文件 * @param tais * TarArchiveInputStream * @throws Exception */ private static void dearchiveFile(File destFile, TarArchiveInputStream tais) throws Exception { BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream(destFile)); int count; byte data[] = new byte[BUFFER]; while ((count = tais.read(data, 0, BUFFER)) != -1) { bos.write(data, 0, count); } bos.close(); }
文件探针用于构建父目录:
/** * 文件探针 * * <pre> * 当父目录不存在时,创建目录! * </pre> * * @param dirFile */ private static void fileProber(File dirFile) { File parentFile = dirFile.getParentFile(); if (!parentFile.exists()) { // 递归寻找上级目录 fileProber(parentFile); parentFile.mkdir(); } }
给出完整实现:
/** * 2010-4-20 */ package org.zlex.commons.compress; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; /** * TAR工具 * * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a> * @since 1.0 */ public abstract class TarUtils { private static final String BASE_DIR = ""; // 符号"/"用来作为目录标识判断符 private static final String PATH = "/"; private static final int BUFFER = 1024; private static final String EXT = ".tar"; /** * 归档 * * @param srcPath * @param destPath * @throws Exception */ public static void archive(String srcPath, String destPath) throws Exception { File srcFile = new File(srcPath); archive(srcFile, destPath); } /** * 归档 * * @param srcFile * 源路径 * @param destPath * 目标路径 * @throws Exception */ public static void archive(File srcFile, File destFile) throws Exception { TarArchiveOutputStream taos = new TarArchiveOutputStream( new FileOutputStream(destFile)); archive(srcFile, taos, BASE_DIR); taos.flush(); taos.close(); } /** * 归档 * * @param srcFile * @throws Exception */ public static void archive(File srcFile) throws Exception { String name = srcFile.getName(); String basePath = srcFile.getParent(); String destPath = basePath + name + EXT; archive(srcFile, destPath); } /** * 归档文件 * * @param srcFile * @param destPath * @throws Exception */ public static void archive(File srcFile, String destPath) throws Exception { archive(srcFile, new File(destPath)); } /** * 归档 * * @param srcPath * @throws Exception */ public static void archive(String srcPath) throws Exception { File srcFile = new File(srcPath); archive(srcFile); } /** * 归档 * * @param srcFile * 源路径 * @param taos * TarArchiveOutputStream * @param basePath * 归档包内相对路径 * @throws Exception */ private static void archive(File srcFile, TarArchiveOutputStream taos, String basePath) throws Exception { if (srcFile.isDirectory()) { archiveDir(srcFile, taos, basePath); } else { archiveFile(srcFile, taos, basePath); } } /** * 目录归档 * * @param dir * @param taos * TarArchiveOutputStream * @param basePath * @throws Exception */ private static void archiveDir(File dir, TarArchiveOutputStream taos, String basePath) throws Exception { File[] files = dir.listFiles(); if (files.length < 1) { TarArchiveEntry entry = new TarArchiveEntry(basePath + dir.getName() + PATH); taos.putArchiveEntry(entry); taos.closeArchiveEntry(); } for (File file : files) { // 递归归档 archive(file, taos, basePath + dir.getName() + PATH); } } /** * 数据归档 * * @param data * 待归档数据 * @param path * 归档数据的当前路径 * @param name * 归档文件名 * @param taos * TarArchiveOutputStream * @throws Exception */ private static void archiveFile(File file, TarArchiveOutputStream taos, String dir) throws Exception { /** * 归档内文件名定义 * * <pre> * 如果有多级目录,那么这里就需要给出包含目录的文件名 * 如果用WinRAR打开归档包,中文名将显示为乱码 * </pre> */ TarArchiveEntry entry = new TarArchiveEntry(dir + file.getName()); entry.setSize(file.length()); taos.putArchiveEntry(entry); BufferedInputStream bis = new BufferedInputStream(new FileInputStream( file)); int count; byte data[] = new byte[BUFFER]; while ((count = bis.read(data, 0, BUFFER)) != -1) { taos.write(data, 0, count); } bis.close(); taos.closeArchiveEntry(); } /** * 解归档 * * @param srcFile * @throws Exception */ public static void dearchive(File srcFile) throws Exception { String basePath = srcFile.getParent(); dearchive(srcFile, basePath); } /** * 解归档 * * @param srcFile * @param destFile * @throws Exception */ public static void dearchive(File srcFile, File destFile) throws Exception { TarArchiveInputStream tais = new TarArchiveInputStream( new FileInputStream(srcFile)); dearchive(destFile, tais); tais.close(); } /** * 解归档 * * @param srcFile * @param destPath * @throws Exception */ public static void dearchive(File srcFile, String destPath) throws Exception { dearchive(srcFile, new File(destPath)); } /** * 文件 解归档 * * @param destFile * 目标文件 * @param tais * ZipInputStream * @throws Exception */ private static void dearchive(File destFile, TarArchiveInputStream tais) throws Exception { TarArchiveEntry entry = null; while ((entry = tais.getNextTarEntry()) != null) { // 文件 String dir = destFile.getPath() + File.separator + entry.getName(); File dirFile = new File(dir); // 文件检查 fileProber(dirFile); if (entry.isDirectory()) { dirFile.mkdirs(); } else { dearchiveFile(dirFile, tais); } } } /** * 文件 解归档 * * @param srcPath * 源文件路径 * * @throws Exception */ public static void dearchive(String srcPath) throws Exception { File srcFile = new File(srcPath); dearchive(srcFile); } /** * 文件 解归档 * * @param srcPath * 源文件路径 * @param destPath * 目标文件路径 * @throws Exception */ public static void dearchive(String srcPath, String destPath) throws Exception { File srcFile = new File(srcPath); dearchive(srcFile, destPath); } /** * 文件解归档 * * @param destFile * 目标文件 * @param tais * TarArchiveInputStream * @throws Exception */ private static void dearchiveFile(File destFile, TarArchiveInputStream tais) throws Exception { BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream(destFile)); int count; byte data[] = new byte[BUFFER]; while ((count = tais.read(data, 0, BUFFER)) != -1) { bos.write(data, 0, count); } bos.close(); } /** * 文件探针 * * <pre> * 当父目录不存在时,创建目录! * </pre> * * @param dirFile */ private static void fileProber(File dirFile) { File parentFile = dirFile.getParentFile(); if (!parentFile.exists()) { // 递归寻找上级目录 fileProber(parentFile); parentFile.mkdir(); } } }
最后给出测试用例:
/** * 2010-4-20 */ package org.zlex.commons.compress; import static org.junit.Assert.*; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.junit.Before; import org.junit.Test; /** * Tar测试 * * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a> * @since 1.0 */ public class TarUtilsTest { private String inputStr; private String name = "data.xml"; @Before public void before() { StringBuilder sb = new StringBuilder(); sb.append("<?xml version=\"1.0\" encoding=\"utf-8\" ?>"); sb.append("\r\n"); sb.append("<dataGroup>"); sb.append("\r\n\t"); sb.append("<dataItem>"); sb.append("\r\n\t\t"); sb.append("<data>"); sb.append("Test"); sb.append("</data>"); sb.append("\r\n\t"); sb.append("<dataItem>"); sb.append("\r\n"); sb.append("</dataGroup>"); inputStr = sb.toString(); } @Test public void testArchiveFile() throws Exception { byte[] contentOfEntry = inputStr.getBytes(); String path = "d:/" + name; FileOutputStream fos = new FileOutputStream(path); fos.write(contentOfEntry); fos.flush(); fos.close(); TarUtils.archive(path); TarUtils.dearchive(path + ".tar"); File file = new File(path); FileInputStream fis = new FileInputStream(file); DataInputStream dis = new DataInputStream(fis); byte[] data = new byte[(int) file.length()]; dis.readFully(data); fis.close(); String outputStr = new String(data); assertEquals(inputStr, outputStr); } @Test public void testArchiveDir() throws Exception { String path = "d:/fd"; TarUtils.archive(path); TarUtils.dearchive(path + ".tar", "d:/fds"); } }
执行代码,来看下效果:
这是原始文件。
这是归档后的文件。
注意红框,这里没有经过任何压缩!
除了tar、zip,其实还有很多归档算法,如ar、jar、cpio。其实现方式,与上述内容较为接近。
至于压缩成*.tar.gz、*.tar.bz2,请朋友们参照前几篇内容!
完整实现见附件!
相关链接:
Java压缩技术(一) ZLib
Java压缩技术(二) ZIP压缩——Java原生实现
Java压缩技术(三) ZIP解压缩——Java原生实现
Java压缩技术(四) GZIP——Java原生实现
Java压缩技术(五) GZIP相关——浏览器解析
Java压缩技术(六) BZIP2——Commons实现
Java压缩技术(七) TAR——Commons实现
评论
5 楼
yangyanglixiao
2017-09-19
ywskin 写道
commons compress 生成tar包,长文件名怎么处理啊?在windows下taos.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU)倒可以,但是主机上,解开有问题。怎么解决啊?
在你的输出流中添加前缀:
TarArchiveOutputStream stream = new TarArchiveOutputStream(...)
stream.setLongFileMode(TarArchiveOutputStream.LONGFILE_POSIX)
参考:https://stackoverflow.com/questions/32528799/when-i-tar-a-file-its-throw-exception-as-is-too-long-100-bytes-tararchiveo
和http://commons.apache.org/proper/commons-compress/tar.html#Long_File_Names
4 楼
yanmie
2015-01-11
您的被系列文章已被本站收录(已注明出处)
地址:http://www.airmyth.com/forum.php?mod=viewthread&tid=812
地址:http://www.airmyth.com/forum.php?mod=viewthread&tid=812
3 楼
ywskin
2011-11-24
commons compress 生成tar包,长文件名怎么处理啊?在windows下taos.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU)倒可以,但是主机上,解开有问题。怎么解决啊?
2 楼
snowolf
2010-04-24
spiritfrog 写道
如果目录深的话,归档会有文件名过长的问题。请问该如何解决?
好问题!
commons compress目前只支持160个字符的文件名长度~
1 楼
spiritfrog
2010-04-24
如果目录深的话,归档会有文件名过长的问题。请问该如何解决?
发表评论
-
Java压缩技术(六) BZIP2——Commons实现
2010-04-15 14:47 22548想要把一整套算法都整理出来,的确是件非常老心费力的事情! 但是 ... -
Java压缩技术(五) GZIP相关——浏览器解析
2010-04-14 10:36 24757昨天一篇GZIP相关实现引起大家的广泛关注,为一位朋友验证一下 ... -
Java压缩技术(四) GZIP——Java原生实现
2010-04-13 17:24 96019趁着头脑清楚,抓紧时间继续整理! 熟悉linux的朋友可能都 ... -
Java压缩技术(三) ZIP解压缩——Java原生实现
2010-04-13 10:20 34427JavaEye的朋友跟我说:“你一口气把ZIP压缩和解压缩都写 ... -
Java压缩技术(二) ZIP压缩——Java原生实现
2010-04-13 00:02 61033去年整理了一篇ZLib算法Java实现(Java压缩技术(一) ... -
Java压缩技术(一) ZLib
2009-09-09 13:09 62208应好友需要,整理一下Java的压缩算法,先从ZLib开始。 ...
相关推荐
ZLib ZIP 压缩——Java 原生实现 ZIP 解压缩——Java 原生实现 GZIP——Java 原生实现 GZIP 相关——浏览器解析 BZIP2——Commons 实现 TAR——Commons 实现
`tar.gz`是一种常见的文件打包格式,它结合了`tar`(归档)和`gzip`(压缩)两种技术,广泛应用于Linux和Unix系统,但在Java中也能很好地处理。本篇文章将详细探讨如何使用Java来对文件夹进行`tar.gz`的压缩与解压缩...
在Java编程中,压缩技术是数据存储和传输中不可或缺的一部分,尤其在处理大量数据时,压缩可以有效地节省存储空间和提高传输效率。本篇将聚焦于Java原生实现的ZIP解压缩方法,主要通过分析提供的两个文件:`ZipUtils...
commons-logging-1.0.4.jar可以引入: org.apache.commons.logging.Log,org.apache.commons.logging.LogFactory等,用于写日志。 免费送,只要1积分
ALevin环境配置所需的jar包——commons-cli-1,5,0 适合人群: 对虚拟网络嵌入算法感兴趣的人 能学到什么: 可以帮你快速的将ALevin基础运行环境配置好,为你节省时间进行进一步的学习 阅读建议: 由于ALevin的配置...
在 Java 开发中,如果需要处理 ZIP、GZIP、BZIP2、7z、ARJ、TAR、CPIO、RAR 等多种压缩格式,Apache Commons Compress 库是一个非常实用的选择。 Apache Commons Compress 库的核心优势在于其模块化的架构,每个...
ame()); tOut.putArchiveEntry(tarEntry);...通过引入该库,我们可以轻松地在 Java 程序中实现文件和文件夹的压缩与解压缩功能。在实际开发中,注意错误处理、资源管理以及安全性等方面,以确保程序的健壮性和安全性。
本文将详细讲解如何使用Java API来压缩和解压缩`.zip`、`.rar`和`.tar`这三种常见的文件格式。 首先,对于`.zip`文件的处理,我们可以使用Apache的`commons-compress`库中的`ZipFile`和`ZipOutputStream`类。在提供...
Apache Commons Compress库是Java社区广泛使用的处理各种压缩格式的库,包括tar.gz。要使用这个库,首先需要将它的jar包添加到项目的类路径中。 1. 添加依赖: 如果你在Maven项目中,可以在pom.xml文件中添加以下...
Apache Commons Daemon是Apache软件基金会的一个项目,它提供了一个跨平台的服务守护进程,允许Java应用程序(如Tomcat)作为操作系统的服务来运行,这样可以实现后台启动、自动重启和管理等功能。 在Windows上,这...
除了Java 2D API,还有一些第三方库,如Apache Commons Imaging(以前的Sanselan)和ImageMagick,它们提供了更丰富的图片处理功能,包括高级压缩算法和更多格式支持。 总结来说,Java中的图片压缩涉及到读取图片、...
1. **Commons**:Apache Commons 是一系列小型、实用的Java工具库,包含许多常用模块,如IO、Lang、Collections等,用于提高开发效率。 2. **DWR (Direct Web Remoting)**:这是一个使Java服务器端代码可以直接调用...
Java中的文件压缩与解压缩是开发过程中的常见需求,Apache Commons Compress库为Java开发者提供了一个强大且灵活的工具集,用于处理各种压缩格式。这个库涵盖了多种压缩算法和文件格式,包括但不限于7z、AR、ARJ、...
Apache Commons Daemon是一个Java库,用于在类Unix操作系统(如Linux、Solaris和macOS)上运行Java应用程序作为系统服务。它提供了`jsvc`工具,允许用户将Java应用程序集成到这些系统的启动、管理和监控流程中,类似...
Apache Commons Compress库是Java平台上的一个开源项目,专门用于处理各种类型的压缩格式,包括tar、gzip、bzip2等。在本示例中,我们将深入探讨如何使用Apache Commons Compress库来创建tar压缩文件,特别是针对...
Java中的文件压缩与解压缩是开发过程中的常见需求,Apache Commons Compress库为Java开发者提供了一个强大且灵活的工具集,用于处理各种压缩格式。这个库不仅支持常见的ZIP和GZIP格式,还支持如ARJ、7Z、BZip2、CPIO...
虽然Java原生支持解压tar文件,但创建tar文件通常需要第三方库如Apache Commons Compress。 再来看`zip`文件,它是跨平台的通用压缩格式,广泛应用于各种操作系统。Java标准库本身就包含了对zip文件的支持,`java....
Apache Commons Compress库是Java平台上的一个开源项目,专门用于处理各种不同的压缩格式,包括tar、gzip、bzip2等。这个库为开发者提供了一种简单、统一的方式来操作这些压缩格式,极大地简化了与压缩文件相关的...
标题中的"commons-fileupload-1.3.3-bin.tar.gz"是一个压缩包文件,包含了Apache Commons FileUpload 1.3.3版本的二进制(bin)文件,通常包括JAR库和其他必要的资源。 Apache Commons FileUpload的工作原理是基于...