Java 基于扩展名对目录中的所有文件进行jaring

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命令使用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 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中试用。