您将需要执行 getResourceAsStream,并确保将 pdf 文件构建到 jar 中。由于您将它们放在源文件夹中,因此它们应该。
假设您在 src/resources/orderForm.pdf 下有 pdf,它将以 /resources/orderForm.pdf 的形式出现在 jar 文件中。您将为 /resources/orderForm.pdf 打开一个资源流。
如果您必须有一个诚实至善的文件,那么您需要将 PDF 作为资源流读取的代码,FileOutputStreams 将其输出到一个临时文件,然后使用该文件。或者,您根本无法将 pdf 打包到 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。