Java: открытие ресурса (txt файл), который находится в банке со стандартным приложением ОС - PullRequest
2 голосов
/ 23 августа 2011

я получаю ошибку «AWT-EventQueue-0 java.lang.IllegalArgumentException: URI не является иерархическим».-Я пытаюсь использовать API java.awt.Desktop, чтобы открыть текстовый файл с приложением по умолчанию ОС.-Приложение, которое я запускаю, запускается из автозапуска банку.Я понимаю, что получение «файла из файла» не является правильным способом, и это называется ресурсом.Я до сих пор не могу открыть его и не могу понять, как это сделать.

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

Есть ли способ открыть ресурс с помощью стандартного приложения os из моего приложения?Thx:)

Ответы [ 6 ]

4 голосов
/ 23 августа 2011

Вам нужно будет извлечь файл из Jar во временную папку и открыть этот временный файл, так же, как вы сделали бы это с файлами в Zip-файле (который в основном является Jar).

1 голос
/ 23 августа 2011

Неправильно

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!");
                }
            }
        });
    }
}
1 голос
/ 23 августа 2011

Я не думаю, что вы можете открыть его с помощью внешних приложений. Насколько я знаю, все установщики извлекают сжатый контент во временную папку и затем удаляют его.

Но вы можете сделать это внутри своего Java-кода с помощью Class.getResource (String name)

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

1 голос
/ 23 августа 2011

Вам не нужно извлекать файл в папку / tmp. Вы можете прочитать его напрямую, используя `getClass (). GetResourceAsStream () '. Но обратите внимание, что путь зависит от того, где находится ваш текстовый файл и каков пакет вашего класса. Если ваш текстовый файл упакован в корень jar, используйте «/prova.txt». (обратите внимание на косую черту).

0 голосов
/ 23 октября 2014

Если то, что вы передаете, может принять java.net.URL, это будет работать:

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

0 голосов
/ 23 августа 2011

Есть классы JarFile и JarEntry от JDK. Это позволяет загрузить файл из 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
...