谁能推荐Java库来操作 jar 文件?我在 java.util.jar上
找到的工具比较简洁(或者也许我没有看一些示例代码)。我对诸如此类的东西感兴趣:
如果任何人都可以使用 java.util.jar 或其他有用的库来指向示例代码。尤其是查看 java.util.jar
的类和方法时,我不清楚如何读取特定Jar条目的内容,甚至不知道如何缩小 Jar (不产生外部进程)。
1和2是简单的手动操作,将条目从Jar复制到另一个,以添加或保留所需的条目,删除原始文件,然后重命名新文件以替换它。
正如jtahlbom指出的那样,Java Jar API可以立即解决其余问题。
更新示例
这些都是非常基本的例子。他们向您展示如何读写Jar。基本上,您可以从中得出几乎所有您需要做的事情。
我已经建立了一个个人图书馆(不包括在内),基本上可以让我通过InputStream
并将其写入,OutputStream
反之亦然。这意味着您可以从任何地方读取并写入任何地方,这可以满足您的大多数需求。
public void unjar(File jar, File outputPath) throws IOException {
JarFile jarFile = null;
try {
if (outputPath.exits() || outputPathFile.mkdirs()) {
jarFile = new JarFile(jar);
Enumeration<JarEntry> entries = jarFile.entries();
while (entries.hasMoreElements()) {
JarEntry entry = entries.nextElement();
File path = new File(outputPath + File.separator + entry.getName());
if (entry.isDirectory()) {
if (!path.exists() && !path.mkdirs()) {
throw new IOException("Failed to create output path " + path);
}
} else {
System.out.println("Extracting " + path);
InputStream is = null;
OutputStream os = null;
try {
is = jarFile.getInputStream(entry);
os = new FileOutputStream(path);
byte[] byteBuffer = new byte[1024];
int bytesRead = -1;
while ((bytesRead = is.read(byteBuffer)) != -1) {
os.write(byteBuffer, 0, bytesRead);
}
os.flush();
} finally {
try {
os.close();
} catch (Exception e) {
}
try {
is.close();
} catch (Exception e) {
}
}
}
}
} else {
throw IOException("Output path does not exist/could not be created");
}
} finally {
try {
jarFile.close();
} catch (Exception e) {
}
}
}
public void jar(File jar, File sourcePath) throws IOException {
JarOutputStream jos = null;
try {
jos = new JarOutputStream(new FileOutputStream(jar));
List<File> fileList = getFiles(sourcePath);
System.out.println("Jaring " + fileList.size() + " files");
List<String> lstPaths = new ArrayList<String>(25);
for (File file : fileList) {
String path = file.getParent().replace("\\", "/");
String name = file.getName();
path = path.substring(sourcePath.getPath().length());
if (path.startsWith("/")) {
path = path.substring(1);
}
if (path.length() > 0) {
path += "/";
if (!lstPaths.contains(path)) {
JarEntry entry = new JarEntry(path);
jos.putNextEntry(entry);
jos.closeEntry();
lstPaths.add(path);
}
}
System.out.println("Adding " + path + name);
JarEntry entry = new JarEntry(path + name);
jos.putNextEntry(entry);
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
byte[] byteBuffer = new byte[1024];
int bytesRead = -1;
while ((bytesRead = fis.read(byteBuffer)) != -1) {
jos.write(byteBuffer, 0, bytesRead);
}
jos.flush();
} finally {
try {
fis.close();
} catch (Exception e) {
}
}
jos.closeEntry();
}
jos.flush();
} finally {
try {
jos.close();
} catch (Exception e) {
}
}
}
如果您花时间看一下,那么有很多示例如何在SO上的zip / jar文件中添加/删除条目。
在这个问题中,我必须调用一个第三方Java库,该库期望,其结果来自Scala例程返回。 我会将Scala-Future封装到一个新的Java-Future中,但是没有办法实现Java-Future方法< code > def cancel(mayinterruptirunning:Boolean):Boolean ,因为它会中断封装的Scala-Future(否则请告诉我)。 我该如何解决这个问题
本文向大家介绍Java中的数据库操作,包括了Java中的数据库操作的使用技巧和注意事项,需要的朋友参考一下 本文提供了有关如何创建简单JDBC应用程序的示例。这将向您展示如何打开数据库连接,执行SQL查询以及显示结果。 创建JDBC应用程序 构建JDBC应用程序涉及以下六个步骤- 导入软件包:要求您包含包含数据库编程所需的JDBC类的软件包。通常,使用import java.sql。*就足够了。
我需要安装一个JAR文件作为库,同时设置数据库群集作为Azure发布管道的一部分。到目前为止,我已经完成了以下工作- 使用Azure CLI任务创建群集定义 使用curl命令将JAR文件从Maven仓库下载到管道代理文件夹 在管道代理上设置数据库CLI 使用将JAR文件从本地(管道代理)目录复制到dbfs:/FileStore/jars文件夹 我正在尝试创建一个集群范围的init脚本(bash)脚
目录其本质也是一种文件,它的r权限是ls,x权限是cd DIR结构体 Unix系统为用户提供了一种和文件结构FILE类似的目录结构DIR。它被称为目录流,目录中的目录项用dirent结构表示(但DIR的并非包含dirent成员) dirent结构 结构体成员 类型 描述 d_into ino_t 文件的inode号 d_name[ ] char 以NULL结尾的文件名 常用函数(库调用) 函数名
我开发了一个简单的代码,通过在实体类“employee”和“Department”上使用JPA的CRUD操作(find)来显示员工姓名。在运行代码时,它工作正常,但真正的问题来了,当我从应用程序创建一个jar文件时,jar文件出现了一个异常,我将该异常写在一个txt文件中 下面是Employee类 下面是显示员工姓名和学位的类 下面是异常“exception[EclipseLink-28019](
我正在尝试将我从eclipse制作的pacman游戏导出到。罐子包装。问题是,尽管eclipse上的一切都运行良好,但当。jar已导出,我使用的资源无法正确加载。我将它们放在一个单独的/res文件夹中,该文件夹位于构建路径上。我通过以下方式访问它们: 我做错了什么?这里是我得到的错误的一个例子(只有在eclipse上导出的. jar中运行良好)