/**
*
*/
package jarutils;
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.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarOutputStream;
import java.util.zip.ZipEntry;
/**
* @author dw-wang
*
*/
public final class JarUtils
{
private static final int BUFFER_SIZE = 4096;
/**
* Utility class - no instances allowed.
*/
private JarUtils ()
{
// no instances allowed -- provides only static helper functions
}
/**
* Extract a jar archive into the base directory
* <code>baseDir</code>.
*
* @param baseDir the root directory where the archive is extracted
* to.
* @param archive jar file.
* @throws IOException in case of an I/O error.
*/
public static void extractJarArchive (File baseDir, File archive)
throws IOException
{
final JarFile archiveFile = new JarFile(archive);
final List archiveEntries = Collections.list(archiveFile.entries());
for (final Iterator iterator = archiveEntries.iterator(); iterator
.hasNext();)
{
InputStream in = null;
FileOutputStream out = null;
try
{
final ZipEntry e = (ZipEntry) iterator.next();
in = archiveFile.getInputStream(e);
final File f = new File(baseDir, e.getName());
if (e.isDirectory())
{
if (!f.exists())
{
if (!f.mkdirs())
{
throw new IOException("Cannot create directory "
+ f);
}
}
}
else
{
if (!f.getParentFile().exists())
{
if (!f.getParentFile().mkdirs())
{
throw new IOException("Cannot create directory "
+ f.getParentFile());
}
}
out = new FileOutputStream(f);
copy(in, out);
}
}
finally
{
IoUtil.close(out);
IoUtil.close(in);
}
}
}
/**
* Creates a jar archive from the directory.
*
* @param baseDir for the jar archive.
* @param archive the jar file.
* @throws IOException in case of an I/O error.
*/
public static void createJarArchive (File baseDir, File archive)
throws IOException
{
JarOutputStream jarArchive = null;
try
{
jarArchive = new JarOutputStream(new FileOutputStream(archive));
addFileToJar(baseDir, baseDir, jarArchive);
}
finally
{
IoUtil.close(jarArchive);
}
}
private static void addFileToJar (File baseDir, File file,
JarOutputStream archive)
throws IOException
{
if (file == null)
{
// done
}
else if (file.isDirectory())
{
String path = FileUtils.getRelativePath(baseDir, file);
(1)(2)(3)(4) if(!(3)path.equals("/") && !(4)path.equals(""))
{
if (!path.endsWith("/"))
{
(5) path (5)+= "/";
}
final JarEntry entry = new JarEntry(path);
archive.putNextEntry(entry);
(6) archive.closeEntry();
}
final File[] files = file.listFiles();
for (int i = 0; i < files.length; i++)
{
addFileToJar(baseDir, files[i], archive);
}
}
else
{
final String path = FileUtils.getRelativePath(baseDir, file);
final JarEntry entry = new JarEntry(path);
archive.putNextEntry(entry);
InputStream in = null;
try
{
in = new FileInputStream(file);
copy(in, archive);
}
finally
{
IoUtil.close(in);
}
archive.closeEntry();
}
}
/**
* Copies the content of the input stream <code>in</code> to the
* output stream <code>out</code>.
*
* @param in input stream.
* @param out output stream.
* @throws IOException in case of an I/O error.
*/
private static void copy (InputStream in, OutputStream out)
throws IOException
{
final byte[] buffer = new byte[BUFFER_SIZE];
int nread;
while ((nread = in.read(buffer)) != -1)
{
out.write(buffer, 0, nread);
}
}
}
分享到:
相关推荐
siンロードしたmsiファイルを実行し,表示にそってインストールする インストールしたbinフォルダにパスを通すGOロジェクトは$ GOPATH / src / github.comの下に作成する インストールのテストを行う > go version ...
conf / deny.txtにリスト名を追加コンソールからreins-0.3.5.jarがある场所まで移动し,以下のコマンドを実行java -jar reins-0.3.5.jarラとはディレクトリ配下にやるこンロードファイルが保存されていきます。...
アプリケーションごとに分离されたロビーと,各ロビーのルーム管理,ルーム内でのクライアント间メッセージングを提供します。 使い方 最早 実行环境として,java 14以上が必要です。环境に合わせ最新のものをインス...
RAR, ZIP 書庫を完全にサポートし、 7Z, ACE, ARJ, BZ2, CAB, GZ, ISO, JAR, LZH, TAR, UUE, Z の書庫の解凍をサポートしています。 WinRAR の特徴は、強力な圧縮、分割書庫、暗号化、自己解凍モジュール、バックア...
lycee-web-library 开発の仕方は以下のような流れ 环境构筑 ...warので,warファイルを実行すれば,サーバーが起动します。 java -jar webapp/build/libs/webapp.jar データベース 数据库ディレクトリ
MyFleetGirls服务器sbt(sbt-extrasのインストールをお勧め)とMariaDBをインストール服务器/ lib以下にから库のjarを入れる(以下のLibでも可) MariaDBにmyfleetという名前の数据库を作成。utf8を有效化する(いく...
-incrund-runtimeオプションは,生成された.jarファイルにKotlinランタイムライブラリを含をとで,自己完结型で実行可能なファイルにします。 kotlinc hello.kt -include-runtime -d hello.jar $ java -jar hello....
すす, すう[ うつ] うす[オリジナル]うう => 数字として出力まて => ポインタのさす値ds停止如何使用上のBrainTsusu.jarを下载。ターミナルからjarのあるとこまでcdして実行してください。ファイルを指定する场合,...
が気軽にーバーサイドエンジニアが気軽にvue.js + spring-bootでSPA开発するためにはどうしたらいいか,という话。 登场するコンポーネントは以下のものたち。 spring-boot(JavaのWeb应用程序框架) webpack...
在给定的压缩包中,我们关注的是两个关键的JAR文件:`jai_codec.jar`和`jai_core.jar`。 `jai_codec.jar`是JAI的编码库,它提供了对多种图像编码格式的支持,例如TIFF(Tagged Image File Format)、JPEG、PNG等。...
我的世界 Minecraft的Shell脚本。 Vanilla Saba也要求备份,因此我也在制作备份外壳。我认为如果定期使用cron可以运行。 服务器的文件名和备份目录... サーバーのjarファイルをダウンロードする。 # 以下のサンプルで
エンタープライズクラスのシステム开発における生产性向上を主目的とした,javaベースのローコード开発プラットフォームです。 码头工人 > docker pull iplass/iplass-standalone > docker run -p 8080:8080 -e ...
标题中的"msbase.jar,mssqlserver.jar,msutil.jar"是Microsoft SQL Server JDBC驱动程序的主要组成部分。这些Java归档(JAR)文件是用于在Java应用程序中与Microsoft SQL Server数据库进行交互的关键组件。 JDBC...
# gitリポジトリをクローンしてフォルダ内に移動 git clone https://github.com/MasaoBlue/derby_study.git cd derby_study 在下面的derby_study目录下derby_study 数据库初始化 # FlywayでDBマイグレーションの...
(另外,实际操作的时候发现JSTL1.2.jar和JSTL1.1.jar这2个包放一起可以在tomcat5.5和tomcat6.0上跑,鉴于JSTL1.1.jar里面没有c.tld等文件,猜测JSTL1.1.jar里面只是放置了1.1的专用的类和信息)
在给定的文件列表中,我们可以看到四个关键的JAR(Java Archive)文件,它们在Java EE应用开发中扮演着重要角色: 1. **javaee.jar**:这是Java EE的API库,包含了Java EE规范定义的所有接口和类。开发者可以通过这...
javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar ...
下一代数字图书馆的后端是基于spring-boot的Single Jar应用程序。 需要 JDK(1.8或更高版本) 阿帕奇Maven 用于数据库和文本搜索的 (在6.6.1上工作) 用于图像相似性搜索 建立 cd back mvn clean install cp -R ...
axiom-api-1.2.12.jar, axiom-impl-1.2.12.jar, axis.jar, axis2-adb-1.6.2.jar, axis2-kernel-1.6.2.jar, axis2-transport-http-1.6.1.jar, axis2-transport-local-1.6.1.jar, commons-codec-...
在Java开发领域,尤其是涉及到Web服务和服务器配置时,`activation.jar`、`mail.jar`和`tools.jar`是三个非常关键的库文件。在本篇文章中,我们将深入探讨这三个库文件的作用,以及它们如何在Tomcat服务器和Axis Web...