Java:打开一个带有OS标准应用程序的jar中的资源(txt文件)

时间:2011-08-23 08:53:48

标签: java resources jar text-files

我收到错误“AWT-EventQueue-0 java.lang.IllegalArgumentException:URI不是分层的”。 - 我正在尝试使用java.awt.Desktop api打开带有OS默认应用程序的文本文件。 - 我正在运行的应用程序是从自动运行jar启动的。 我知道从文件中获取“文件”并不是正确的方法,而且它被称为资源。我仍然无法打开它,也无法弄清楚如何做到这一点。

open(new File((this.getClass().getResource("prova.txt")).toURI()));

有没有办法用我的应用程序中的标准os应用程序打开资源? 谢谢:)

6 个答案:

答案 0 :(得分:4)

你必须将文件从Jar提取到临时文件夹并打开那个临时文件,就像你对Zip文件中的文件一样(Jar基本上就是这样)。

答案 1 :(得分:1)

您不必将文件解压缩到/ tmp文件夹。您可以使用`getClass()。getResourceAsStream()'直接读取它。但请注意,路径取决于您的txt文件的位置以及您的类包的内容。如果您的txt文件打包在jar的根目录中,请使用'“/ prova.txt”'。 (注意领先的斜线)。

答案 2 :(得分:1)

我认为您无法使用外部应用程序打开它。据我所知,所有安装程序都将其压缩内容提取到临时位置,然后将其删除。

但您可以使用Class.getResource(String name)

在Java代码中完成

http://download.oracle.com/javase/6/docs/api/java/lang/Class.html#getResource(java.lang.String

答案 3 :(得分:1)

错误

open(new File((this.getClass().getResource("prova.txt")).toURI()));

EULA

/**

Do you accept the License Agreement of XYZ app.?

*/
import java.awt.Dimension;
import javax.swing.*;

import java.net.URL;
import java.io.File;
import java.io.IOException;

class ShowThyself {

    public static void main(String[] args) throws Exception {
        // get an URL to a document..
        File file = new File("ShowThyself.java");
        final URL url = file.toURI().toURL();

        // ..then do this
        SwingUtilities.invokeLater( new Runnable() {
            public void run() {
                JEditorPane license = new JEditorPane();
                try {
                    license.setPage(url);
                    JScrollPane licenseScroll = new JScrollPane(license);
                    licenseScroll.setPreferredSize(new Dimension(305,90));

                    int result = JOptionPane.showConfirmDialog(
                        null,
                        licenseScroll,
                        "EULA",
                        JOptionPane.OK_CANCEL_OPTION);
                    if (result==JOptionPane.OK_OPTION) {
                        System.out.println("Install!");
                    } else {
                        System.out.println("Maybe later..");
                    }
                } catch(IOException ioe) {
                    JOptionPane.showMessageDialog(
                        null,
                        "Could not read license!");
                }
            }
        });
    }
}

答案 4 :(得分:0)

JDK有JarFileJarEntry个类。这允许从JarFile加载文件。

JarFile jarFile = new JarFile("jar_file_Name");
JarEntry entry = jarFile.getJarEntry("resource_file_Name_inside_jar");
InputStream stream = jarFile.getInputStream(entry); // this input stream can be used for specific need

答案 5 :(得分:0)

如果你传递的内容可以接受java.net.URL,那么这将有效:

this.getClass().getResource("prova.txt")).toURI().toURL()