当前位置: 首页 > 面试题库 >

运行打包在jar文件中的exe

申浩广
2023-03-14
问题内容

我正在通过Java程序执行exe。该路径是用Java硬编码的。

我已经把我的exe包装在罐子里。

但是由于我在Java文件中硬编码了路径名而感到困惑,因此我无法将jar作为独立程序执行。

是否有任何包装此类jar的提示,即内部具有exe并能够作为独立程序运行?


问题答案:

这会将提取.exe到本地磁盘上的本地文件。当Java程序存在时,该文件将被删除。

import java.io.Closeable;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.security.CodeSource;
import java.security.ProtectionDomain;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;

public class Main
{
    public static void main(final String[] args)
        throws URISyntaxException,
               ZipException,
               IOException
    {
        final URI uri;
        final URI exe;

        uri = getJarURI();
        exe = getFile(uri, "Main.class");
        System.out.println(exe);
    }

    private static URI getJarURI()
        throws URISyntaxException
    {
        final ProtectionDomain domain;
        final CodeSource       source;
        final URL              url;
        final URI              uri;

        domain = Main.class.getProtectionDomain();
        source = domain.getCodeSource();
        url    = source.getLocation();
        uri    = url.toURI();

        return (uri);
    }

    private static URI getFile(final URI    where,
                               final String fileName)
        throws ZipException,
               IOException
    {
        final File location;
        final URI  fileURI;

        location = new File(where);

        // not in a JAR, just return the path on disk
        if(location.isDirectory())
        {
            fileURI = URI.create(where.toString() + fileName);
        }
        else
        {
            final ZipFile zipFile;

            zipFile = new ZipFile(location);

            try
            {
                fileURI = extract(zipFile, fileName);
            }
            finally
            {
                zipFile.close();
            }
        }

        return (fileURI);
    }

    private static URI extract(final ZipFile zipFile,
                               final String  fileName)
        throws IOException
    {
        final File         tempFile;
        final ZipEntry     entry;
        final InputStream  zipStream;
        OutputStream       fileStream;

        tempFile = File.createTempFile(fileName, Long.toString(System.currentTimeMillis()));
        tempFile.deleteOnExit();
        entry    = zipFile.getEntry(fileName);

        if(entry == null)
        {
            throw new FileNotFoundException("cannot find file: " + fileName + " in archive: " + zipFile.getName());
        }

        zipStream  = zipFile.getInputStream(entry);
        fileStream = null;

        try
        {
            final byte[] buf;
            int          i;

            fileStream = new FileOutputStream(tempFile);
            buf        = new byte[1024];
            i          = 0;

            while((i = zipStream.read(buf)) != -1)
            {
                fileStream.write(buf, 0, i);
            }
        }
        finally
        {
            close(zipStream);
            close(fileStream);
        }

        return (tempFile.toURI());
    }

    private static void close(final Closeable stream)
    {
        if(stream != null)
        {
            try
            {
                stream.close();
            }
            catch(final IOException ex)
            {
                ex.printStackTrace();
            }
        }
    }
}



 类似资料:
  • 请帮我把它修好,怎么做。我完全是在Eclipse上做的。

  • 我已经尝试了很多方法,并遵循了几个在线说明,比如这个-Eclipse导出的Runnable JAR不显示图像,但到目前为止,没有成功。 我有一个非常简单的程序,读取一个文本文件(test.txt),并将其内容打印到标准输出。我正在使用Eclipse。这是我所做的- 我将文本文件放入名为“资源”的文件夹中 任何帮助都将不胜感激。 附录:这是代码。 }

  • 问题内容: 如果您在 / myfolder中 有一个名为jar的文件,并且您想使用从中调用的类,那么如何从命令行进行操作呢? 我以为会进入目录然后说,但这不起作用。任何帮助,将不胜感激。 问题答案: 使用。 如果该类不在包中,则只需。 如果您不在所在目录中,则可以执行以下操作: 在Unix或Linux平台上:

  • 我需要使用存储在jar文件中的build.xml文件运行ANT构建。这个jar文件在类路径上可用。有没有可能做到这一点,而不爆炸的jar文件,并保存build.xml到本地目录?如果是这样,我该怎么做。 更新: jar文件是一个ant构建项目,其中类路径中的build.xml是通过使用ant库的java程序运行的。前端是一个web应用程序,它作为依赖项加载这个构建项目jar。用户将单击构建应用程序

  • 问题内容: 我已使用以下语句使用此博客中的java文件创建了jar文件 现在我已经尝试通过命中和尝试各种命令在hadoop中运行此jar 1个 输出: 2。 输出: 如何在hadoop中运行jar?根据程序需要,我具有正确的DFS位置。 问题答案: 我能够重现您的问题。问题是您要在哪里创建罐子。 基本上,要打包到jar中的目录在查找主类文件时会混淆jar文件。相反,如果您尝试这样做: 例如,将类文

  • 问题内容: 我使用Java创建了一个Docker映像,并将jar文件复制到该映像中。我的Dockerfile是: 执行以下命令后: 在控制台中,我看到了应用程序的输出,一切都很好。但是当我停止图像时,我不知道如何再次运行图像?当我执行以下命令时: 该应用程序再次运行,但是在我的Dockerfile中,我已经编写了此命令。如何在不使用此命令的情况下运行映像并使应用程序自动运行? 问题答案: 图像和容