web-dev-qa-db-ja.com

クラスパスからファイルをファイルインスタンスとしてロード/参照する方法

クラスパスにあるファイルがあります。 com/path/to/file.txt。このファイルをJava.io.Fileオブジェクトとしてロードまたは参照する必要があります。これは、Java.io.RandomAccessFileを使用してファイルにアクセスする必要があるためです(ファイルが大きいため、特定のバイトオフセットをシークする必要があります)。これは可能ですか? RandomAccessFileのコンストラクタには、Fileインスタンスまたは文字列(パス)が必要です。

特定のバイトオフセットをシークして行を読み取る別のソリューションがある場合は、同様にそれを受け入れます。

69
jake

クラスパスリソースのURLを取得してみてください。

URL url = this.getClass().getResource("/com/path/to/file.txt")

次に、URIを受け入れるコンストラクターを使用してファイルを作成します。

File file = new File(url.toURI());
225
joelittlejohn

これも機能し、/ path/to/file URI変換を必要としません。ファイルがクラスパスにある場合、これはそれを見つけます。

File currFile = new File(getClass().getClassLoader().getResource("the_file.txt").getFile());
46
Hotel

私はこの1行のコードが最も効率的で便利だと思っています。

File file = new File(ClassLoader.getSystemResource("com/path/to/file.txt").getFile());

魅力のように機能します。

18
Gondy

または、絶対CLASSPATHパスを使用してリソースのInputStreamを直接使用します(/スラッシュ文字):


getClass().getResourceAsStream("/com/path/to/file.txt");

または相対CLASSPATHパス(記述するクラスがリソースファイル自体と同じJavaパッケージにある場合、つまりcom.path.to):


getClass().getResourceAsStream("file.txt");
4
Jiri Patera