如何仅将选定文件夹中的内容添加到jar

Shehan Dhaleesha

所以我有这个java程序,当我们给出内容的路径时会生成一个jar文件。但是问题是它在jar文件中生成了更多目录。例如,假设相关内容在目录中/home/user/Desktop/sample/bin/tmp当我创建jar文件时,它包含所有这些目录,这意味着主目录中有user目录,目录中有Desktop目录,依此类推,直到tmp添加文件夹中的内容但是我想要的是,将这个tmp文件夹中的内容直接添加到jar中,而不添加那些额外的目录。这是我使用的代码,我想对其进行修改或完全重写。有任何想法吗...?

    private static void createJar(File source, JarOutputStream target) throws IOException
        {
            BufferedInputStream in = null;
            try
            {
                if (source.isDirectory())
                {
                    String name = source.getPath().replace("\\", "/");
                    if (!name.isEmpty())
                    {
                        if (!name.endsWith("/"))
                            name += "/";
                        JarEntry entry = new JarEntry(name);
                        entry.setTime(source.lastModified());
                        target.putNextEntry(entry);
                        target.closeEntry();
                    }
                    for (File nestedFile: source.listFiles())
                        createJar(nestedFile, target);
                    return;
                }

                JarEntry entry = new JarEntry(source.getPath().replace("\\", "/"));
                entry.setTime(source.lastModified());
                target.putNextEntry(entry);
                in = new BufferedInputStream(new FileInputStream(source));

                byte[] buffer = new byte[1024];
                while (true)
                {
                    int count = in.read(buffer);
                    if (count == -1)
                        break;
                    target.write(buffer, 0, count);
                }
                target.closeEntry();
            }
            finally
            {
                if (in != null)
                    in.close();
            }
        }

请注意,这source是目录,这target是我要创建的jar文件。

Shehan Dhaleesha

我找到了答案。希望有人像我一样需要它。

 private static void createJar(File source, JarOutputStream target) {
        createJar(source, source, target);
    }



 private static void createJar(File source, File baseDir, JarOutputStream target) {
        BufferedInputStream in = null;

        try {
            if (!source.exists()){
                throw new IOException("Source directory is empty");
            }
            if (source.isDirectory()) {
                // For Jar entries, all path separates should be '/'(OS independent)
                String name = source.getPath().replace("\\", "/");
                if (!name.isEmpty()) {
                    if (!name.endsWith("/")) {
                        name += "/";
                    }
                    JarEntry entry = new JarEntry(name);
                    entry.setTime(source.lastModified());
                    target.putNextEntry(entry);
                    target.closeEntry();
                }
                for (File nestedFile : source.listFiles()) {
                    createJar(nestedFile, baseDir, target);
                }
                return;
            }

            String entryName = baseDir.toPath().relativize(source.toPath()).toFile().getPath().replace("\\", "/");
            JarEntry entry = new JarEntry(entryName);
            entry.setTime(source.lastModified());
            target.putNextEntry(entry);
            in = new BufferedInputStream(new FileInputStream(source));

            byte[] buffer = new byte[1024];
            while (true) {
                int count = in.read(buffer);
                if (count == -1)
                    break;
                target.write(buffer, 0, count);
            }
            target.closeEntry();
        } catch (Exception ignored) {

        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (Exception ignored) {
                    throw new RuntimeException(ignored);
                }
            }
        }
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Windows Search API将文件夹添加到Windows索引列表中

来自分类Dev

vb.net〜如何将目录中的文件夹名称添加到列表框中

来自分类Dev

递归地将文件添加到JList-仅添加最后一个文件夹中的文件

来自分类Dev

将文件夹添加到罐子中

来自分类Dev

如何将文件夹名称添加到批处理文件中正在创建的文件中?

来自分类Dev

将文件夹中的所有jar添加到jmeter类路径

来自分类Dev

如何使用bitbake将文件夹或文件添加到配方的根目录中?

来自分类Dev

如何将CSS参考链接添加到文件夹中的本地HTML文件?

来自分类Dev

将res / raw文件夹内容文件(视频)添加到外部SD文件夹

来自分类Dev

如何将文件夹添加到.gitignore

来自分类Dev

如何在Windows 10中将标签添加到文件夹

来自分类Dev

将文件夹添加到目录后,如何从该文件夹中移动特定文件?

来自分类Dev

如何从Java目录中将类文件和文件夹添加到jar文件

来自分类Dev

递归地将文件添加到JList-仅添加最后一个文件夹中的文件

来自分类Dev

如何将文件夹文件的修改日期添加到GridView中?

来自分类Dev

将文件夹添加到罐子中

来自分类Dev

如何将根文件夹添加到使用7zip归档的文件中

来自分类Dev

将文件夹的名称添加到该文件夹中的所有`.bin`文件中

来自分类Dev

将文件夹中的所有jar文件添加到类路径

来自分类Dev

将文件夹中的文件添加到Android应用程序中的列表中

来自分类Dev

如何将包含多个jar的外部文件夹添加到Web应用程序的Maven构建中?

来自分类Dev

将res / raw文件夹内容文件(视频)添加到外部SD文件夹

来自分类Dev

使用python zipfile命令将类文件替换/添加到jar中的子文件夹

来自分类Dev

如何将 Localhost\Users + READ 权限添加到 Powershell 中的文件夹

来自分类Dev

如何将资源文件夹中的图像添加到字典

来自分类Dev

如何将带有 jar 的 lib 添加到共享文件夹?

来自分类Dev

Net 标准库 - 将文件添加到“dotnet pack”上的 nuget 内容文件夹

来自分类Dev

如何将框架添加到 Xcode Playground 的“Sources”文件夹中的文件中?

来自分类Dev

Docker将所有文件夹文件添加到现有文件夹中,无需替换

Related 相关文章

  1. 1

    如何使用Windows Search API将文件夹添加到Windows索引列表中

  2. 2

    vb.net〜如何将目录中的文件夹名称添加到列表框中

  3. 3

    递归地将文件添加到JList-仅添加最后一个文件夹中的文件

  4. 4

    将文件夹添加到罐子中

  5. 5

    如何将文件夹名称添加到批处理文件中正在创建的文件中?

  6. 6

    将文件夹中的所有jar添加到jmeter类路径

  7. 7

    如何使用bitbake将文件夹或文件添加到配方的根目录中?

  8. 8

    如何将CSS参考链接添加到文件夹中的本地HTML文件?

  9. 9

    将res / raw文件夹内容文件(视频)添加到外部SD文件夹

  10. 10

    如何将文件夹添加到.gitignore

  11. 11

    如何在Windows 10中将标签添加到文件夹

  12. 12

    将文件夹添加到目录后,如何从该文件夹中移动特定文件?

  13. 13

    如何从Java目录中将类文件和文件夹添加到jar文件

  14. 14

    递归地将文件添加到JList-仅添加最后一个文件夹中的文件

  15. 15

    如何将文件夹文件的修改日期添加到GridView中?

  16. 16

    将文件夹添加到罐子中

  17. 17

    如何将根文件夹添加到使用7zip归档的文件中

  18. 18

    将文件夹的名称添加到该文件夹中的所有`.bin`文件中

  19. 19

    将文件夹中的所有jar文件添加到类路径

  20. 20

    将文件夹中的文件添加到Android应用程序中的列表中

  21. 21

    如何将包含多个jar的外部文件夹添加到Web应用程序的Maven构建中?

  22. 22

    将res / raw文件夹内容文件(视频)添加到外部SD文件夹

  23. 23

    使用python zipfile命令将类文件替换/添加到jar中的子文件夹

  24. 24

    如何将 Localhost\Users + READ 权限添加到 Powershell 中的文件夹

  25. 25

    如何将资源文件夹中的图像添加到字典

  26. 26

    如何将带有 jar 的 lib 添加到共享文件夹?

  27. 27

    Net 标准库 - 将文件添加到“dotnet pack”上的 nuget 内容文件夹

  28. 28

    如何将框架添加到 Xcode Playground 的“Sources”文件夹中的文件中?

  29. 29

    Docker将所有文件夹文件添加到现有文件夹中,无需替换

热门标签

归档