繁体   English   中英

java:将文件添加到jar目录

[英]java: add a file to a jar directory

我正在研究一个项目,该项目要求用户上载Java文件,该文件以后可以编译成类文件。 我已经编写了将文件上传到项目文件夹的代码。 使用Eclipse启动时,它可以完美运行。 当我将项目打包为JAR时,就会出现问题。 该代码引发异常。 我了解原因。.当我们打包项目时,仅将类文件加载到JAR中,而不是源文件中,并且JAR文件的位置也有所不同。

让我解释一下我已经做过的事情以及我需要做的事情:

在该项目的IDE版本中,我有类似以下内容: 在此处输入图片说明
用户可以在其中浏览文件,然后单击上载按钮将其添加到项目结构中。 这与以下代码完美配合:

String path = Paths.get(".").toAbsolutePath().normalize().toString()+"\\path\\to\\directory";
File source=new File(textField1.getText());
String fileName="";
try {
    fileName=new java.io.File(textField1.getText()).getName();
    Files.copy(source.toPath(),new java.io.File(path+fileName).toPath(),REPLACE_EXISTING);
} catch (IOException e2) {
    e2.printStackTrace();
}

当我必须使用JAR文件运行相同的代码时,我知道应该更改获取项目根目录的方式,然后导航到所需目录。 不知何故,我无法正常工作。 我已经尝试了以下方法:

URL location=MainClass.class.getProtectionDomain().getCodeSource().getLocation();
String p = URLDecoder.decode(location.getFile(), "UTF-8");
System.out.println(location);

这将输出rsrc:./ 如何将上传的文件复制到Jar文件中的所需目录?

我还尝试了另一种方法,我想到创建一个shell脚本来执行jar uf jar-file input-file(s) 我将JAR文件和此Shell脚本放在同一目录中,并执行以下代码:

try {
        String fileName = "shellFile.sh";
        URL location=MainClass.class.getProtectionDomain().getCodeSource().getLocation();
        String p = URLDecoder.decode(location.getFile(), "UTF-8");
        System.out.println(location);
        String inputFilePath = p + fileName;
        System.out.println(inputFilePath);
        Process process = Runtime.getRuntime().exec(inputFilePath);
    } catch (IOException e2) {
        // TODO Auto-generated catch block
        e2.printStackTrace();
    }

但我得到以下异常:

java.io.IOException:无法运行程序“ ./shellFile.sh”:CreateProcess错误= 2,系统找不到在java.lang.ProcessBuilder.start中指定的文件(未知源)

有什么方法可以将文件上传到JAR文件中的目录?

String cmd = "jar uvf " + <jar file name> + " " + <name of file to be added;
System.out.println(cmd);
Process p = Runtime.getRuntime().exec(cmd);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM