いくつかのtxtファイルを保持する単体テストパッケージがあります。これらは呼び出しによってロードされgetClass().getResource(file);
、問題なく動作します。同じフォルダーにcsvファイルを追加しました。その名前をパラメーターとして指定するgetClass().getResource("csvFile.csv");
と、nullになります...理由はありますか?
4602 次
2 に答える
4
使用するとき
getClass().getResource("csvFile.csv");
クラスに相対的に見えます。
使用するとき
getClass().getClassLoader().getResource("csvFile.csv");
クラスパスの最上位ディレクトリを検索します。
2 番目のフォームが必要だと思われます。
委任の前に、次のアルゴリズムを使用して、指定されたリソース名から絶対リソース名が構築されます。
- 名前が「/」(「\u002f」) で始まる場合、リソースの絶対名は、「/」に続く名前の部分です。
それ以外の場合、絶対名は次の形式になります。
modified_package_name/name
modified_package_name は、「.」を「/」に置き換えたこのオブジェクトのパッケージ名です。('\u002e')。
ご覧のとおり、クラスのパッケージ名のディレクトリ変換が使用されています。
たとえば、コードが下にあるMavenプロジェクトがありますsrc/main/java
。私のリソース ディレクトリsrc/main/resources
csvFile.csv
クラスパスにコピーされるリソースディレクトリに追加します。
public class B {
B() {
URL resource = getClass().getClassLoader().getResource("csvFile.csv");
System.out.println("Found "+resource);
}
public static void main(String... args) {
new B();
}
}
印刷する
Found file:/C:/untitled/target/classes/csvFile.csv
これは、resources ディレクトリから maven によって構築された領域にあります。
于 2012-08-21T13:31:52.460 に答える
0
これは、ファイルへのアクセスに使用できる入力ストリームを返しgetClass().getClassLoader().getResourceAsStream(file)
ます
于 2012-08-21T13:41:03.267 に答える