私に与えられたJavaプロジェクトのリソースの完全なファイルパスを取得しようとしています。コードでは、ファイル名のみを使用してファイルを見つけることができません。私はそれを働かせるために助けが必要です。スレッドコンテキストクラスローダーからリソースを読み込めませんか?
これは、プロジェクトの構造である:
これはコードある:
package com.testing.software.apps;
public class FileTest {
public static void main(String[]args) {
String fileName = "orders-2017.txt";
String filePath = getFilePath(fileName);
System.out.println("File path is: " + filePath);
}
public static String getFilePath(String fileName) {
String fullFilepath = Thread.currentThread().
getContextClassLoader().
getResource(fileName).
getPath();
return fullFilepath;
}
}
このコードはでヌルポインタ例外スロー "ある、getPathを();"ライン。私は、この行 "getResource(fileName)"がnull URLオブジェクトを返すため、例外が発生していることがわかりました。 getResourceコードを調べると、私は最終的に "url = findResource(name);" nullを返します。 java.net.URLにfindResourceの定義を見てみると
public URL getResource(String name) {
URL url;
if (parent != null) {
url = parent.getResource(name);
} else {
url = getBootstrapResource(name);
}
if (url == null) {
url = findResource(name);
}
return url;
}
、私はそれは常に、それによって私のすべての時間をヌルを与え、nullを返していることがわかります。
protected URL findResource(String name) {
return null;
}
このコードは常にnull与えてしまい、なぜ誰かが説明していただけますとどのように私はそれがファイル名のみを使用してファイルを見つけることができますか?
続きを読むhttps://maven.apache.org/plugins/maven-resources-plugin/ – Luk
私の投稿のコードは、プロジェクト内のファイルを見つけるためのプラットフォームに依存しない良い方法ですか、それとも良い方法がありますか?私はここで例2に示すようにバッファリングされたリーダーを使用しようとしました。 https://www.mkyong.com/java/java-read-a-text-file-line-by-line/ファイルパス= "。\\ src \ test \\ resources \\ text-files \ \ orders \\ orders-2017.txt "それはうまく動作し、ヌルポインタがありません。しかし、このアプローチがより良いかどうかはわかりません。お知らせ下さい。ありがとうございました。 – testerjoe2
Paths.get( "text-files/orders/orders-2017.txt")を使用してパスオブジェクトを取得できます。 javaのPathクラスについてもっと読むことをお勧めします。 Mavenは通常のコードではsrc/main/resources、テストケースではsrc/test/resourcesのデフォルトの場所にあるファイルを探します。 – Luk