クラスパス/JAR ファイルから File オブジェクトとしてリソースにアクセスしようとしています。代わりに InputStream オブジェクトを使用する方法が推奨されることは承知していますが、File オブジェクトを必要とする外部ライブラリ (WorldEdit) を使用しています。
これが私のコードです:
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 をファイル システム上のファイルにコピーしてから、そのファイルを開くことですが、それが必要ないことを願っています。