Я пытаюсь получить доступ к ресурсу из пути к классу/файла JAR как объекта File .Я знаю, что вместо этого предпочтительнее использовать объект InputStream, но я использую внешнюю библиотеку (WorldEdit), которой нужен объект File.
Вот мой код:
InputStream templStream = "".getClass().getResourceAsStream("/res/template.prom");
System.out.println("templateStream: " + templStream.toString());
File templFile = new File("".getClass().getResource("/res/template.prom").toURI());
System.out.println("templateFile: " + templFile.canRead());
Теперь, пока я все еще внутри eclipse, оба способа доступа к ресурсу работают безупречно и выдают следующий результат:
templStream: java.io.BufferedInputStream@746d1683
templFile: true
Но после экспорта кода в архив JAR код дает сбой:
templStream: sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream@47aa261b
Exception in thread "main" java.lang.IllegalArgumentException: URI is not hierarchical
at java.io.File.<init>(File.java:392)
at SMCToPROM.main(SMCToPROM.java:101)
Итак, я безуспешно искал способ либо получить доступ к ресурсу как файлу напрямую, либо пойти по пути использования InputStream и преобразования этого InputStream в файл.
В худшем случае запасным решением будет копирование InputStream в файл в файловой системе, а затем открытие этого файла, но я надеюсь, что это не потребуется.