Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何启动Java中的PDF文件?_Java_File_Javafx - Fatal编程技术网

如何启动Java中的PDF文件?

如何启动Java中的PDF文件?,java,file,javafx,Java,File,Javafx,我在Netbeans上创建了一个Java应用程序,我想在单击按钮时启动一个PDF文件 我首先做的是将文件“manual.pdf”放在我上课的目录中,我尝试了以下代码: if(Desktop.isDesktopSupported()) { try { File file= new File("manual.pdf"); Desktop.getDesktop().open(file); } catch(IOException ex) {..

我在Netbeans上创建了一个Java应用程序,我想在单击按钮时启动一个PDF文件

我首先做的是将文件“manual.pdf”放在我上课的目录中,我尝试了以下代码:

if(Desktop.isDesktopSupported()) {
     try {
          File file= new File("manual.pdf");
          Desktop.getDesktop().open(file);
     } catch(IOException ex) {...}
但是当我运行它时,它说文件不存在,所以我把

System.out.println(file.getAbsolutePath());
为了查看它试图打开的文件的路径,它

C:\Users\adrian\Documents\Mis Programas\Convertron\manual.pdf
但是文件在里面

C:\Users\adrian\Documents\Mis Programas\Convertron\src\org\sicadcam\convertron\manual.pdf
它正在项目的根目录中查找文件

当我将文件
manual.pdf
放在根目录中时,它工作了,但当我在dist目录中运行可执行jar时,它没有工作

然后我试了一下

File file = new File(ConvertronController.class.getResource("manual.pdf").toExternalForm());
只是想看看会发生什么,但没用

如何使它在类所在的同一目录中查找文件


或者,我应该将文件放在哪里,以便在构建应用程序时,它能够继续工作?

我已经使用过,这是过去:

getClass().getResource(“a_file.txt”)


在这种情况下,调用它的类与
a_file.txt

位于同一目录中。您可以将PDF文档放入Java包中,例如
资源
,如下一个项目结构:

TestProject
|
\---src
    |   
    +---org
    |   \---paulvargas
    |       \---test
    |               OpenTest.java
    |               
    \---resources
            manual.pdf
要打开文件,请执行以下操作:

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);
        }
    }
}

谢谢你的回答。我试过了,当我打印文件的路径时,我认为它是正确的,它说它是
C:\Users\adrian\Documents\Mis%20Programas\Convertron\dist\run1978651465\Convertron.jar\recursos\manual.pdf
,但它不会打开该文件。我打开了jar文件,以确保文件
manual.pdf
位于正确的目录中,并且正确无误。我没有收到任何错误消息,只是没有打开。没错。在这种情况下,您需要将JAR中的文件复制到某个目录。我更新了我的答案。祝你好运因为这个问题是用JavaFX标记的,所以我认为这可能会引起兴趣: