Ich versuche, den vollständigen Dateipfad einer Ressource in einem Java-Projekt zu erhalten, das mir gegeben wurde. Der Code kann die Datei nicht finden, indem nur der Dateiname verwendet wird. Ich brauche Hilfe, damit es funktioniert.Ressourcen können nicht vom Threadkontextklassenlader geladen werden?
Dies ist die Projektstruktur:
Dies ist der Code:
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;
}
}
Dieser Code wirft eine Null-Zeiger Ausnahme in der "getPath();" Linie. Ich fand heraus, dass die Ausnahme auftritt, weil diese Zeile "getResource (fileName)" ein Null-URL-Objekt zurückgibt. Nach dem Überprüfen des getResource-Codes sehe ich schließlich "url = findResource (name);" gibt null zurück.
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;
}
bei der Definition der Suche von java.net.URL Findresource, ich sehe, dass es sich dabei immer null zurück, mir ein Null-die ganze Zeit zu geben.
protected URL findResource(String name) {
return null;
}
Kann jemand bitte erklären, warum dieser Code immer null geben landet und wie kann ich es die Datei, indem nur die Dateinamen machen findet Verwendung?
Weiterführende Informationen https://maven.apache.org/plugins/maven-resources-plugin/ – Luk
Ist der Code in meinem Beitrag eine gute, plattformunabhängige Möglichkeit, Dateien innerhalb eines Projekts zu finden, oder gibt es einen besseren Ansatz? Ich habe versucht, gepufferten Leser zu verwenden, wie in Beispiel 2 hier gezeigt. https://www.mkyong.com/java/java-read-a-text-file-line-by-line/ Ich benutzte den Dateipfad = ". \\ src \ test \\ resources \\ text-files \ \ orders \\ orders-2017.txt "und es funktioniert gut und es gibt keinen Nullzeiger. Aber ich bin mir nicht sicher, ob dieser Ansatz besser ist. Bitte beraten. Vielen Dank. – testerjoe2
Sie können einfach Paths.get ("text-files/orders/orders-2017.txt") verwenden, um Pfadobjekt zu erhalten. Ich empfehle, mehr über Path-Klasse in Java zu lesen. Maven sucht nach der Datei im Standardspeicherort src/main/resources für regulären Code und src/test/resources für Testfälle. – Luk