Java でクラスパスからテキストファイルを読み取るにはどうすればいいですか? 質問する

Java でクラスパスからテキストファイルを読み取るにはどうすればいいですか? 質問する

CLASSPATH システム変数に設定されているテキスト ファイルを読み取ろうとしています。ユーザー変数ではありません。

以下のようにファイルへの入力ストリームを取得しようとしています:

ファイル ( ) のディレクトリをD:\myDirCLASSPATH に配置して、以下を試してください。

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 行のコードと同じことを試してください。

しかし残念なことに、どれも機能せず、常にnullInputStream にアクセスしてしまいますin

ベストアンサー1

クラスパス上のディレクトリでは、同じクラスローダーによってロードされたクラスから、次のいずれかを使用できるはずです。

// 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

おすすめ記事