Я пытаюсь найти путь к ресурсу, но мне не повезло.
Это работает (как в IDE, так и с JAR), но таким образом я не могу получить путь к файлу, только содержимое файла:
ClassLoader classLoader = getClass().getClassLoader();
PrintInputStream(classLoader.getResourceAsStream("config/netclient.p"));
Если я сделаю это:
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("config/netclient.p").getFile());
Результат:
java.io.FileNotFoundException: file:/path/to/jarfile/bot.jar!/config/netclient.p (No such file or directory)
Есть ли способ получить путь к файлу ресурса?
Ответы:
Это намеренно. Содержимое «файла» может быть недоступно в виде файла. Помните, что вы имеете дело с классами и ресурсами, которые могут быть частью файла JAR или другого типа ресурса. Загрузчик классов не должен предоставлять дескриптор файла для ресурса, например, файл JAR, возможно, не был расширен в отдельные файлы в файловой системе.
Все, что вы можете сделать, получив java.io.File, можно сделать, скопировав поток во временный файл и сделав то же самое, если java.io.File абсолютно необходим.
источник
При загрузке ресурса убедитесь, что вы заметили разницу между:
и
Я думаю, эта путаница вызывает большинство проблем при загрузке ресурса.
Кроме того, когда вы загружаете изображение, его проще использовать
getResourceAsStream()
:Когда вам действительно нужно загрузить (не образный) файл из архива JAR, вы можете попробовать это:
источник
bin
Прежде чем использовать путь `/com/myorg/filename.ext ', убедитесь, что вы поместили файлы, которые вы хотите прочитать, в папку и перейдите в каталог загрузки классов в ресурсах.Ответ в одну строку -
В основном
getResource
метод дает URL. Из этого URL вы можете извлечь путь, позвонивtoExternalForm()
Ссылки:
getResource () , toExternalForm ()
источник
file:/
к пути, который работает в jar, но не в IDEЯ потратил некоторое время, возившись с этой проблемой, потому что ни одно решение, которое я нашел, на самом деле не работало, как ни странно! Рабочий каталог часто не является каталогом JAR, особенно если JAR (или любая другая программа) запускается из меню «Пуск» в Windows. Итак, вот что я сделал, и он работает для файлов .class, запускаемых извне JAR, так же, как и для JAR. (Я тестировал только под Windows 7.)
источник
if
netclient.p
находится внутри файла JAR, у него не будет пути, потому что этот файл находится внутри другого файла. в этом случае лучший путь, который вы можете выбрать, - это действительноfile:/path/to/jarfile/bot.jar!/config/netclient.p
.источник
Вам нужно понять путь в файле JAR.
Просто обратитесь к нему относительно. Так что если у вас есть файл (myfile.txt), расположенный в каталоге foo.jar
\src\main\resources
(стиль maven). Вы бы ссылались на это как:Если вы сбросите свой jar-файл, используя его,
jar -tvf myjar.jar
вы увидите выходные данные и относительный путь в файле jar-файла и воспользуетесь FORWARD SLASHES.источник
File.separator
.В моем случае я использовал объект URL вместо Path.
файл
Ресурс в classpath с помощью загрузчика классов
Когда мне нужно прочитать содержимое, я могу использовать следующий код:
И вы можете получить доступ к содержимому с помощью InputStream.
источник
Это тот же код от пользователя Tombart с потоковым сбросом и закрытием, чтобы избежать неполного копирования содержимого временного файла из ресурса jar и иметь уникальные имена временных файлов.
источник
Файл - это абстракция для файла в файловой системе, и файловые системы ничего не знают о том, что является содержимым JAR.
Попробуйте использовать URI, я думаю, что есть протокол jar: //, который может быть полезен для ваших целей.
источник
Следующий путь работал для меня:
classpath:/path/to/resource/in/jar
источник
Получение этого
getSystemResourceAsStream
- лучший вариант. Получая входной поток, а не файл или URL, работает в JAR-файле и как отдельный.источник
Может быть немного поздно, но вы можете использовать мою библиотеку KResourceLoader, чтобы получить ресурс из вашего jar- файла :
источник
Находясь в файле JAR, ресурс находится абсолютно в иерархии пакетов (не в иерархии файловой системы). Поэтому, если у вас есть класс com.example.Sweet, загружающий ресурс с именем «./default.conf», тогда имя ресурса указывается как «/com/example/default.conf».
Но если это в банке, то это не файл ...
источник
В вашей папке ресурсов (java / main / resources) вашего jar добавьте свой файл (мы предполагаем, что вы добавили XML-файл с именем import.xml ), после чего вы вводите
ResourceLoader
если используете пружину, как показано ниже.внутри функции тура напишите ниже код для загрузки файла:
источник
Возможно, этот метод можно использовать для быстрого решения.
источник
java.lang.NullPointerException: Attempt to invoke virtual method 'java.security.CodeSource java.security.ProtectionDomain.getCodeSource()' on a null object reference
следуйте коду!
/ SRC / главная / ресурсы / файл
источник