getResource () к файлу во время выполнения - PullRequest
2 голосов
/ 16 ноября 2011

Я поместил некоторые .txt файлы в папку src (в папке resources).

Но я не могу создать действительный File во время выполнения из этого ресурса.

String path = this.getClass().getResource("/resources/file.txt").getFile();
File file = new File(path);

if (!file.exists()) {
}

Я запускаю свою программу из затмения. Я ничего не вставил в classpath.
Я хочу, чтобы мои текстовые файлы были встроены в файл .jar, когда я запускаю свое приложение, я хочу получить эти файлы и скопировать их в какое-то место.

UPDATE

если я сделаю InputStream is = getClass().getResourceAsStream("/resources/file.txt");

Я получаю поток !!

Ответы [ 2 ]

1 голос
/ 04 декабря 2018

Как вы уже обнаружили вскоре после публикации своего вопроса, это работает:

InputStream is = getClass().getResourceAsStream("/resources/file.txt");

Причина это работает, в то время как исходный код этого не делает, потому что файл ""msgstr "внутри zip-файла (jar-файл является zip-файлом) не настоящий файл, пока он не будет извлечён.Но извлечение файла - это то, что вы пытаетесь сделать, поэтому на данный момент в вашей программе это не настоящий файл.Так что этот вопрос XY проблема : вы хотели создать объект File, но это было невозможно - вам нужно было вернуться к тому, что вы изначально пытались сделать, что было прочитано из записи zip.

0 голосов
/ 16 ноября 2011

Вы сказали, что используете eclipse, и что вы перетаскивали свои текстовые файлы в пакет "src". «src» не является пакетом. Это просто каталог файловой системы. По умолчанию в проекте Java в eclipse весь ваш исходный код хранится в каталоге с именем «src», а все ваши файлы .class хранятся в каталоге с именем «bin». getClass (). getResource () разрешает местоположение ваших файлов .class. Вы должны переместить текстовые файлы в каталог «bin».

В каком пакете ваш класс?

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

import java.io.File;

public class ResourceTest {
    public static void main(String[] args) {
        ResourceTest rt = new ResourceTest();
        rt.openFile();
    }

    public void openFile() {
        String path = this.getClass().getResource("/resources/file.txt").getFile();
        File file = new File(path);

        System.out.println(path);
        System.out.println(file.getAbsolutePath());
        System.out.println(file.exists());
    }
}

Я вижу этот вывод:

/C:/Users/rab29/Documents/eclipse/Overflow/bin/resources/file.txt
C:\Users\rab29\Documents\eclipse\Overflow\bin\resources\file.txt
true
...