当前位置: 首页 > 知识库问答 >
问题:

URI不是分层的需要使用File类的方法

颜欣怡
2023-03-14

我需要用我的代码打开一个视频文件,它在Eclipse中运行得非常好,但是当我导出到一个可运行的JAR中时,我会得到一个错误“URI不分层”。

我见过有人建议使用getResourceAsStream(),但我在使用桌面时需要一个文件对象。getDesktop。打开(文件)。有人能帮我吗?

以下是代码:

try {
    URI path1 = getClass().getResource("/videos/tutorialVid1.mp4").toURI();
    File f = new File(path1);

    Desktop.getDesktop().open(f);
} catch (Exception e) {
    e.printStackTrace();
}

如果有帮助,我的文件夹列表如下

>

  • src

    • 视频

    编辑:我计划只在windows上运行,并使用launch4j创建一个exe。

  • 共有1个答案

    陈实
    2023-03-14

    您可以将文件从jar复制到临时文件并打开它。

    以下是为给定jar资源创建临时文件的方法:

    public static File createTempFile(String path) {
        String[] parts = path.split("/");
        File f = File.createTempFile(parts[parts.length - 1], ".tmp");
        f.deleteOnExit();
        try (Inputstream in = getClass().getResourceAsStream(path))  {
            Files.copy(in, f.toPath(), StandardCopyOption.REPLACE_EXISTING);
        }
        return f;
    }
    

    下面是一个如何使用它的示例:

    Desktop.getDesktop().open(createTempFile("/videos/tutorialVid1.mp4"));
    
     类似资料:
    • 我需要获取一个文件对象(不是流)来传递给库。我得到的是“URI不是分层的”。我见过一些解决方案,但它们要么效率很低,要么使用外部库。 File myFile=新文件(MyClass.class.getClassLoader()。getResource(目录)。toURI()) 顺便说一下,我需要传递到的对象 Lucene FSDirectory。打开(myFile) 有什么想法吗?

    • 我刚开始在Java程序(为Windows 7制作)中使用Jsch进行SSH连接。我遇到了一个问题,将私钥合并到我的程序中。我使用以下代码: 其中“auth”是同一个包中的文件夹。好消息是,当在Eclipse中运行它时,一切都很好,但是当作为jar运行它时,一切都失败了。给出的错误是:“IllegalArgumentException:URI不是分层的”。 我知道这个错误与路径名和使用URI作为文件

    • 我试图理解Android的意图机制,对一个我想解决的问题感到困惑。 Android为intent提供了动作数据类别 我想问为什么数据是URI 为什么一切都不能成为一种行为和行为的范畴? URI有什么价值 我问所有这些也是因为当我看到像电话、消息和地图这样的应用程序时,他们都试图使用URI来获取一些可能通过EXTRAS获得的数据。 有人请帮我澄清Android意图机制的设计方面。

    • 问题内容: 我已将我的应用程序部署到jar文件。当我需要将数据从一个资源文件复制到jar文件外部时,请执行以下代码: 我遇到的错误是:URI is not hierarchical。在IDE中运行时,我不会遇到此错误。 如果我将上述代码更改为对StackOverFlow上其他帖子的一些帮助,请执行以下操作: 问题答案: 你不能做这个 它不是文件!从ide运行时,不会有任何错误,因为你没有运行jar

    • 假设我有以下代码: 是否有可能在中调用来自的的编译器错误?我知道实际上你会把那个方法放在构造函数中,但这个问题是出于好奇。

    • 我得到一个“TypeError:需要一个类似字节的对象,而不是'str'”。我在使用StringIO时遇到了一个错误“TypeError:initial_值必须是str或None,而不是bytes”,我在使用Python 3.7。 我也得到这个函数同样的错误。"返回pickle.load(打开(DATA_FILE))"