2

我有一种情况,我的可执行 jar 中有一个模板文件(.xls)。不,在运行时我需要为这个文件创建 100 个副本(稍后将唯一地附加到该文件)。用于获取 jar 文件中的资源 (template.xls)。我在用

URL templateFile=G1G2Launcher.class.getClass().getResource(File.separator+"Template.xls");
            System.out.println("URL-->"+templateFile);
            System.out.println("URI For Source-->"+templateFile.toURI().getPath());
            sourceFile=templateFile.toURI().getPath();

我得到一个空值templateFile.toURI.getPath()可能是什么原因?这就是我得到的:

URL--> jar:file:/home/eketdik/Desktop/G1G2-KD@Tool.jar!/Template.xls
URI For Source-->null

实际上,我将此 URI 传递给 File 构造函数以获取它的 File Object ..(用于复制它)。所以堆栈跟踪是-->

java.lang.NullPointerException
    at java.io.File.<init>(File.java:251)
    at gui.Utility.copyfile(Utility.java:29)
    at printer.Printer.printFinalSiteWiseReportsForSignOff(Printer.java:1408)

请建议我哪里出错了?

4

2 回答 2

2

在运行时修改 Jar 文件是不可能的。

因此,您可以将文件作为输入流获取,然后在 jar 之外创建副本。下面的代码可帮助您创建所需的文件。

InputStream in = G1G2Launcher.class.getClass().getResourceAsStream("file.xls")
OutputStream out = new FileOutputStream(new File("file.xls"));
int read = 0;
byte[] bytes = new byte[1024];
while ((read = in.read(bytes)) != -1) {
    out.write(bytes, 0, read);
}
于 2012-12-27T10:13:38.537 回答
0

只需使用getResourceAsStream(String res)

于 2012-12-27T10:13:48.307 回答