我想知道如何在Eclipse中的源包内部或外部(即/ src / resources / images /或/ resources / images /)的资源文件夹中创建具有资源(图片,pdf)的可运行JAR.目前,我的资源在我的eclipse项目的源文件夹中,但我也在它自己的包中的文件夹中尝试过.该程序在eclipse中构建并执行正常,但是当我作为可运行的jar导出时,我在桌面上运行它时会不断收到文件未找到异常.我用这样的字符串声明我的文件
private String file = "src/resources/orderForm.pdf";
我明白我应该使用getResourceAsStream(),但由于一些限制,我不能(与文件如何保存有关,我正在读整个pdf文件,而不是作为流)所以我想知道如何把我的文件放到jar中的正确位置.如果我在制作完成后打开它,它们总是出现在文件夹之外的顶层.这是我当前项目结构的屏幕截图.为了说它,这个项目在eclipse中工作正常,在java构建属性中,源文件夹与所有子文件夹一起在构建路径中,我也尝试在早期测试中对空资源文件夹做同样的事情.
解决方法:
您需要执行getResourceAsStream,并确保将pdf内置到jar中.因为你在源文件夹中有它们,所以它们应该.
假设您在src / resources / orderForm.pdf下有pdf,它将最终作为/resources/orderForm.pdf放在jar文件中.您将为/resources/orderForm.pdf打开资源流.
如果你必须有一个诚实的善良文件,那么你需要将PDF作为资源流读取的代码,FileOutput将其输出到临时文件,然后使用该文件.或者,你根本无法将jar包装在jar中.
public class PDFWriter {
public static final String testDir = "C:\\pdftest\\";
public static final String adobePath = "\"C:\\Program Files\\Adobe\\Reader 10.0\\Reader\\AcroRd32.exe\"";
public static void main(String[] args){
try {
new PDFWriter().run();
} catch (Exception e) {
e.printStackTrace();
}
}
public void run() throws Exception {
InputStream in = this.getClass().getResourceAsStream("/resources/test.pdf");
new File(testDir).mkdirs();
String pdfFilePath = testDir + "test.pdf";
FileOutputStream out = new FileOutputStream (pdfFilePath);
byte[] buffer = new byte[1024];
int len = in.read(buffer);
while (len != -1) {
out.write(buffer, 0, len);
len = in.read(buffer);
}
out.close();
Runtime rt = Runtime.getRuntime();
String command = adobePath + " " + pdfFilePath;
rt.exec(command);
}
}
文件方式在eclipse中工作的唯一原因是因为bin文件夹是一个真正的文件夹,但是当你构建这个东西时,它们都会被压缩到一个jar中.
也许对源文件夹有点困惑.如果你有一个名为’src’的源文件夹,它下面的包结构不包含“src”. src / net / whatever / Class.java在构建时将变为net / whatever / Class.class.
因此,您可以创建一个名为’rsrc'(资源)的第二个源文件夹,并在此下放置您的resources / order.pdf.构建jar时,rsrc / resources / order.pdf将成为resources.order.pdf.
标签:java,embedded-resource 来源: https://codeday.me/bug/20190729/1569204.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。