我在Netbeans上创建了一个Java应用程序,我想在单击按钮时启动PDF文件.
我首先做的是将文件"manual.pdf"放在我有我的类的目录中,我尝试了这段代码:
if(Desktop.isDesktopSupported()) {
try {
File file= new File("manual.pdf");
Desktop.getDesktop().open(file);
} catch(IOException ex) {...}
Run Code Online (Sandbox Code Playgroud)
但是当我跑它时,它说文件不存在,所以我放了
System.out.println(file.getAbsolutePath());
Run Code Online (Sandbox Code Playgroud)
为了看到它试图打开的文件的路径,它是
C:\Users\adrian\Documents\Mis Programas\Convertron\manual.pdf
Run Code Online (Sandbox Code Playgroud)
但文件在
C:\Users\adrian\Documents\Mis Programas\Convertron\src\org\sicadcam\convertron\manual.pdf
Run Code Online (Sandbox Code Playgroud)
它正在项目的根目录中查找该文件.
当我将文件manual.pdf放在根目录中时,它工作,但是,当我在dist目录中运行可执行jar时,它没有.
然后我尝试了
File file = new File(ConvertronController.class.getResource("manual.pdf").toExternalForm());
Run Code Online (Sandbox Code Playgroud)
只是看看会发生什么,但它没有用.
我怎样才能在类所在的同一目录中查找该文件?
或者我应该在哪里放置文件,以便在构建应用程序时它继续工作?
您可以将PDF文档放在Java包中,例如resources,像下一个项目结构:
TestProject
|
\---src
|
+---org
| \---paulvargas
| \---test
| OpenTest.java
|
\---resources
manual.pdf
Run Code Online (Sandbox Code Playgroud)
打开文件:
package org.paulvargas.test;
import java.awt.Desktop;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class OpenTest {
public static void main(String[] args) throws Exception {
if (Desktop.isDesktopSupported()) {
// File in user working directory, System.getProperty("user.dir");
File file = new File("manual.pdf");
if (!file.exists()) {
// In JAR
InputStream inputStream = ClassLoader.getSystemClassLoader()
.getResourceAsStream("resources/manual.pdf");
// Copy file
OutputStream outputStream = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
outputStream.close();
inputStream.close();
}
// Open file
Desktop.getDesktop().open(file);
}
}
}
Run Code Online (Sandbox Code Playgroud)