クラスパスにあるファイルがあります。 com/path/to/file.txt
。このファイルをJava.io.File
オブジェクトとしてロードまたは参照する必要があります。これは、Java.io.RandomAccessFile
を使用してファイルにアクセスする必要があるためです(ファイルが大きいため、特定のバイトオフセットをシークする必要があります)。これは可能ですか? RandomAccessFile
のコンストラクタには、File
インスタンスまたは文字列(パス)が必要です。
特定のバイトオフセットをシークして行を読み取る別のソリューションがある場合は、同様にそれを受け入れます。
クラスパスリソースのURLを取得してみてください。
URL url = this.getClass().getResource("/com/path/to/file.txt")
次に、URIを受け入れるコンストラクターを使用してファイルを作成します。
File file = new File(url.toURI());
これも機能し、/ path/to/file URI変換を必要としません。ファイルがクラスパスにある場合、これはそれを見つけます。
File currFile = new File(getClass().getClassLoader().getResource("the_file.txt").getFile());
私はこの1行のコードが最も効率的で便利だと思っています。
File file = new File(ClassLoader.getSystemResource("com/path/to/file.txt").getFile());
魅力のように機能します。
または、絶対CLASSPATHパスを使用してリソースのInputStream
を直接使用します(/
スラッシュ文字):
getClass().getResourceAsStream("/com/path/to/file.txt");
または相対CLASSPATHパス(記述するクラスがリソースファイル自体と同じJavaパッケージにある場合、つまりcom.path.to
):
getClass().getResourceAsStream("file.txt");