文件未在jar文件中的java中打开

文件未在jar文件中的java中打开,java,file-io,fileinputstream,fileoutputstream,Java,File Io,Fileinputstream,Fileoutputstream,我试图从java应用程序中打开文件。使用来自的以下代码 代码: 当我使用如下路径时: "C:\\Users\\kalathoki\\Documents\\NetBeansProjects\\TestJava\\src\\files\\test.pdf" 它打开了。但是我的文件在我的包里 files/test.pdf 我曾经 files\\test.pdf 它显示以下异常: Exception in thread "AWT-EventQueue-0" java.lang.Illega

我试图从java应用程序中打开文件。使用来自的以下代码

代码:

当我使用如下路径时:

"C:\\Users\\kalathoki\\Documents\\NetBeansProjects\\TestJava\\src\\files\\test.pdf" 
它打开了。但是我的文件在我的包里

files/test.pdf 
我曾经

files\\test.pdf 
它显示以下异常:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: The file: \files\test.pdf doesn't exist.
为什么??任何想法。。。我想在jar文件中包含我的文件,用户需要时可以从我的应用程序打开该文件


谢谢…

只允许从文件系统打开文件。一种解决方案是将PDF文件本地保存在文件系统中并从中读取。这消除了从JAR本身提取文件的问题,因此效率更高。

只允许从文件系统打开文件。一种解决方案是将PDF文件本地保存在文件系统中并从中读取。这消除了从JAR本身提取文件的过程,因此效率更高。

不幸的是,您无法通过JAR中包含的桌面加载文件

然而,你并不是没有选择。一个很好的解决方法是创建一个临时文件,然后按详细说明打开它


祝你好运

不幸的是,您无法通过jar中包含的桌面加载文件

然而,你并不是没有选择。一个很好的解决方法是创建一个临时文件,然后按详细说明打开它


祝你好运

假设test.pdf在包文件中,请尝试以下操作:

File myFile = new File(getClass().getResource("/files/test.pdf").toURI());

假设test.pdf在包文件中,请尝试以下操作:

File myFile = new File(getClass().getResource("/files/test.pdf").toURI());

此代码工作正常。请使用此代码在jar文件中打开pdf文件

    try {
        // TODO add your handling code here:
        String path = jTextField1.getText();
        System.out.println(path);
        Path tempOutput = null;
        String tempFile = "myFile";
        tempOutput = Files.createTempFile(tempFile, ".pdf");
        tempOutput.toFile().deleteOnExit();
        InputStream is = getClass().getResourceAsStream("/JCADG.pdf");
        Files.copy(is,tempOutput,StandardCopyOption.REPLACE_EXISTING);
        if(Desktop.isDesktopSupported())
        {
            Desktop dTop = Desktop.getDesktop();
            if(dTop.isSupported(Desktop.Action.OPEN))
            {
                dTop.open(tempOutput.toFile());
            }
        }
    } catch (IOException ex) {}

此代码工作正常。请使用此代码在jar文件中打开pdf文件

    try {
        // TODO add your handling code here:
        String path = jTextField1.getText();
        System.out.println(path);
        Path tempOutput = null;
        String tempFile = "myFile";
        tempOutput = Files.createTempFile(tempFile, ".pdf");
        tempOutput.toFile().deleteOnExit();
        InputStream is = getClass().getResourceAsStream("/JCADG.pdf");
        Files.copy(is,tempOutput,StandardCopyOption.REPLACE_EXISTING);
        if(Desktop.isDesktopSupported())
        {
            Desktop dTop = Desktop.getDesktop();
            if(dTop.isSupported(Desktop.Action.OPEN))
            {
                dTop.open(tempOutput.toFile());
            }
        }
    } catch (IOException ex) {}

如果此类的文件位于src内部,然后将路径更改为files/test.pdfw为什么要使用
files\\test.pdf
打开
files/test.pdf
?@Tichodroma实际上
C:\\Users\\kalathoki\\Documents…
工作了,所以我尝试了
files\\test.pdf
test.pdf
文件在
文件
package>中您是否尝试了新的
path/to
/path/到
?new还可以尝试显示
新文件(“.”)的绝对路径这肯定会有帮助。我没有阅读
我想把我的文件放在我的项目jar文件中。
部分,对不起。使用
InputStream is=System.class.getResourceAsStream(“/path/to/file.pdf”)
将其作为
InputStream
获取,如果此类的文件位于src内,然后将路径更改为files/test.pdfw为什么要使用
files\\test.pdf
打开
files/test.pdf
?@Tichodroma实际上
C:\\Users\\kalathoki\\Documents…
工作了,所以我尝试了
files\\test.pdf
test.pdf
文件在
文件
package>中您是否尝试了新的
path/to
/path/到
?new还可以尝试显示
新文件(“.”)的绝对路径这肯定会有帮助。我没有阅读
我想把我的文件放在我的项目jar文件中。
部分,对不起。使用
InputStream is=System.class.getResourceAsStream(“/path/to/file.pdf”)
InputStream
的形式获取它实际上不是真的,在Linux getDesktop()下,open()允许打开jar中的文件,Windows显然不允许。在您链接的文档中,他们没有提到您描述的限制。事实上,这不是真的,在Linux getDesktop()下。open()允许打开jar中的文件,Windows显然不允许。在您链接的文档中,他们没有提到您描述的限制。