我正在尝试使用Java使用jar命令将jar文件夹中的所有文件包含在内,如下所示,
jar -cvf /Abhishek/logs.jar my_directory/logs/*.logs*
我正在使用Java来执行此操作。
String cmd[] = {"jar", "-cvf", "/Abhishek/logs.jar", "my_directory/logs/*.logs*"};
pb = Runtime.getRuntime().exec(cmd);
但只有清单存储在jar中。
added manifest
当我解压缩jar文件时,我收到了清单文件。 所以我怀疑
*log.*
是否允许使用这种语法? 因为它在终端中运行良好。
有人可以对此有所了解吗?
谢谢。
答案 0 :(得分:1)
在Linux上,文件通配由shell完成。因此,当您在终端输入<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="VIDEO_PARENT_CLASS" style="position: relative;">
<a href="#" class="vidUrl">
<div class="thumb-overlay"></div>
<img class="thumb" src="http://lorempixel.com/300/200/">
</a>
</div>
<div class="VIDEO_PARENT_CLASS" style="position: relative;">
<a href="#" class="vidUrl">
<div class="thumb-overlay"></div>
<img class="thumb" src="http://lorempixel.com/300/200/">
</a>
</div>
时,shell会将其扩展为匹配文件列表。然后将其传递给该计划。
如果直接执行程序,则必须自己扩展模式。或者您可以让shell使用类似于
的命令执行它*.log
答案 1 :(得分:0)
您可能只想在jar命令使用的java.util.jar package中使用相同的类。这将避免第二个Java进程,并将避免依赖shell扩展:
try (JarOutputStream jar = new JarOutputStream(
new BufferedOutputStream(
Files.newOutputStream(
Paths.get("/Abhishek/logs.jar"))));
DirectoryStream<Path> dir = Files.newDirectoryStream(
Paths.get("my_directory/logs"), "*.logs*")) {
for (Path file : dir) {
BasicFileAttributes attr =
Files.readAttributes(file, BasicFileAttributes.class);
String name = file.toString();
if (attr.isDirectory()) {
name = name + "/";
}
JarEntry entry = new JarEntry(name);
entry.setLastModifiedTime(attr.lastModifiedTime());
entry.setLastAccessTime(attr.lastAccessTime());
entry.setCreationTime(attr.creationTime());
entry.setSize(attr.size());
jar.putNextEntry(entry);
Files.copy(file, jar);
}
}