2

さまざまな種類の JSON のサブフォルダーを含む「res」というリソース フォルダー内の *.txt ファイルを読み取る Swing Java プログラムがあります。Eclipse から直接実行すると、すべて問題ありません。実行可能なjarを作成しても機能しません。私は、すべてのテキスト ファイルを、それらが呼び出されたパッケージに入れることで、恐ろしいソリューションで動作させることができました。

それらを読むには、次のコード行を使用します。

InputStream is = this.getClass().getResourceAsStream(file + ".txt");

file は文字列です。これは指定されたファイルをjarファイルで検索すると思いましたが、明らかにそうではありません。ファイルへのパス、 res/subfolder/name_of_file.txt および subfolder/name_of_file.txt を入力しようとしましたが、役に立ちませんでした。これが私のプロジェクトの構造です

Project
   src
      com.package
   res
      JSON_type1
      JSON_type2
         file.txt

com.package から、JSON_type2/file.txt から読み取る必要があるクラスがあります。テキスト ファイルをサブフォルダーに整理しておく明白な理由は、GUI がこれらのサブフォルダーの内容をドロップダウン リストに入力することです。

ここで他の質問から集めたものから、テキストファイルが呼び出されたパッケージにテキストファイルを保持したい場合、 getResourceAsStream() が私の解決策でした。それ以外に、ClassLoaderのサブクラス化とfindResource()の上書きについて何かを見つけました。私はそのクラスとその機能に慣れていないので、可能であればこの解決策を避けたいと思っています。

さらに情報が必要な場合は、お知らせください。

ありがとうございました

PS: この質問は、私の以前の質問hereから生じました

4

3 に答える 3

4

パッケージ内のファイルをスラッシュで分割することでアドレス指定できます。たとえば、file.txtの場合はgetResourceAsStream("/res/JSON_type2/file.txt")

スラッシュはフォルダ構造用ではなく、プラットフォームに依存しません。クラスローダーがファイルをアドレス指定する方法にすぎません。

于 2012-04-23T18:29:11.777 に答える
4
// added leading / to indicate search from root of class-path
String file = "/res/JSON_type2/file.txt";
InputStream is = this.getClass().getResourceAsStream(file);
于 2012-04-23T18:29:24.853 に答える
1

これを行うことで、基本的にEclipseで探している機能を取得できました。

src (folder)
   main (package)
      ...Classes...
other (folder)
   res  (package)
      ...txt files...

Eclipse はフォルダーを完全に無視し、パッケージだけを気にしているようです。テキスト ファイルをパッケージに入れている限り、getResourceAsStream("/res/somefile.txt") で InputStream を取得できます。

于 2012-06-12T09:03:37.203 に答える