Java 基于扩展名对目录中的所有文件进行jaring
我正在尝试使用jar命令使用Java将文件夹中的所有文件放入jar,如下所示:Java 基于扩展名对目录中的所有文件进行jaring,java,bash,shell,jar,sh,Java,Bash,Shell,Jar,Sh,我正在尝试使用jar命令使用Java将文件夹中的所有文件放入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 m
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.*
是否允许使用这种类型的语法?
因为它在航站楼工作得很好
有人能解释一下吗
谢谢。在Linux上,文件全局绑定由shell完成。因此,当您在终端输入
*.log
时,shell会将其展开到匹配文件的列表中。然后将其传递给程序
如果直接执行程序,则必须自己扩展模式。或者,您可以让shell使用类似于的命令来执行它
String cmd[] = {"sh", "-c", "jar -cvf /Abhishek/logs.jar my_directory/logs/*.logs*"};
您可能只想在jar命令使用的类中使用相同的类。这将避免第二个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);
}
}
try(JarOutputStream jar=newjaroutputstream(
新的缓冲输出流(
Files.newOutputStream(
get(“/Abhishek/logs.jar”);
DirectoryStream dir=Files.newDirectoryStream(
get(“我的目录/日志”),“*.logs*”){
for(路径文件:dir){
基本文件属性属性属性=
Files.readAttributes(文件,BasicFileAttributes.class);
字符串名称=file.toString();
if(attr.isDirectory()){
名称=名称+“/”;
}
JarEntry=新的JarEntry(名称);
entry.setLastModifiedTime(attr.lastModifiedTime());
entry.setLastAccessTime(attr.lastAccessTime());
entry.setCreationTime(attr.creationTime());
entry.setSize(attr.size());
jar.putNextEntry(条目);
复制(文件,jar);
}
}
您使用的是哪种操作系统?linux,我正在ubuntu中试用。