[解決済み] Javaでクラスパスからテキストファイルを本当に読み込む方法
2022-03-24 08:47:41
質問
システム変数CLASSPATHに設定されているテキストファイルを読み込もうとしています。ユーザー変数ではありません。
私は、以下のようにファイルへの入力ストリームを取得しようとしています。
ファイルのディレクトリに(
D:\myDir
)をCLASSPATHに追加して、以下をお試しください。
InputStream in = this.getClass().getClassLoader().getResourceAsStream("SomeTextFile.txt");
InputStream in = this.getClass().getClassLoader().getResourceAsStream("/SomeTextFile.txt");
InputStream in = this.getClass().getClassLoader().getResourceAsStream("//SomeTextFile.txt");
ファイルのフルパス(
D:\myDir\SomeTextFile.txt
)をCLASSPATHに登録し、上記3行のコードと同じように試してみてください。
しかし、残念ながらどれもうまくいかず、常に
null
をInputStreamに入力します。
in
.
解決方法は?
クラスパスにあるディレクトリで、同じクラスローダーでロードされたクラスから、どちらかを使用することができるはずです。
// From ClassLoader, all paths are "absolute" already - there's no context
// from which they could be relative. Therefore you don't need a leading slash.
InputStream in = this.getClass().getClassLoader()
.getResourceAsStream("SomeTextFile.txt");
// From Class, the path is relative to the package of the class unless
// you include a leading slash, so if you don't want to use the current
// package, include a slash like this:
InputStream in = this.getClass().getResourceAsStream("/SomeTextFile.txt");
もし、これらが動作しないのであれば、何か他の問題があることを示唆しています。
そこで、たとえば次のようなコードを考えてみましょう。
package dummy;
import java.io.*;
public class Test
{
public static void main(String[] args)
{
InputStream stream = Test.class.getResourceAsStream("/SomeTextFile.txt");
System.out.println(stream != null);
stream = Test.class.getClassLoader().getResourceAsStream("SomeTextFile.txt");
System.out.println(stream != null);
}
}
そしてこのディレクトリ構造。
code
dummy
Test.class
txt
SomeTextFile.txt
そして、(私はLinuxボックスを使っているので、Unixのパスセパレータを使用)。
java -classpath code:txt dummy.Test
結果
true
true
関連
-
エラー java.util.NoSuchElementException
-
Java のエラーです。未解決のコンパイル問題 解決方法
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Javaで配列に特定の値が含まれているかどうかを判断するにはどうすればよいですか?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] ファイルの内容からJavaの文字列を作成するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
IllegalArgumentException この例外を解決する方法
-
SpringBootApplication を型解決できない。
-
eclipseにプロジェクトをインポートした後、Editorにmain typeが含まれない問題
-
Methodのinvokeメソッド実装のJavaリフレクション
-
[オリジナル】java学習ノート【II】よくあるエラー クラスパス上のクラスファイルが見つからない、またはアクセスできない場合
-
あるコードに出会いましたが、何に使うのか理解できません。 List<String> list = new ArrayList<String>() { { a
-
起動時にEclipseエラーが発生しました。起動中に内部エラーが発生しました。java.lang.NullPoin: "Javaツーリングの初期化 "中に内部エラーが発生しました。
-
java -serverコマンドで「Error: no `server' JVM at ... jvm.dll」を解決する方法です。
-
Java(1)仕上げの基本概念+eclipseのインストール構成
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?