webentwicklung-frage-antwort-db.com.de

So laden / referenzieren Sie eine Datei als File-Instanz aus dem Klassenpfad

Ich habe eine Datei in meinem Klassenpfad, z. com/path/to/file.txt. Ich muss diese Datei als Java.io.File - Objekt laden oder referenzieren. Dies liegt daran, dass ich mit Java.io.RandomAccessFile Auf die Datei zugreifen muss (die Datei ist groß und ich muss nach einem bestimmten Byte-Offset suchen). Ist das möglich? Die Konstruktoren für RandomAccessFile erfordern eine File -Instanz oder einen String (Pfad).

Wenn es eine andere Lösung gibt, nach einem bestimmten Byte-Offset zu suchen und die Zeile zu lesen, bin ich auch dafür offen.

69
jake

Versuchen Sie, eine URL für Ihre Klassenpfadressource zu erhalten:

URL url = this.getClass().getResource("/com/path/to/file.txt")

Erstellen Sie dann eine Datei mit dem Konstruktor, der einen URI akzeptiert:

File file = new File(url.toURI());
225
joelittlejohn

Dies funktioniert auch und erfordert keine/path/to/file-URI-Konvertierung. Befindet sich die Datei im Klassenpfad, wird dieser gefunden.

File currFile = new File(getClass().getClassLoader().getResource("the_file.txt").getFile());
46
Hotel

Ich finde diesen einzeiligen Code am effizientesten und nützlichsten:

File file = new File(ClassLoader.getSystemResource("com/path/to/file.txt").getFile());

Klappt wunderbar.

18
Gondy

Oder verwenden Sie direkt das InputStream der Ressource unter Verwendung des absoluten CLASSPATH-Pfads (beginnend mit dem / Schrägstrich):


getClass().getResourceAsStream("/com/path/to/file.txt");

Oder relativer CLASSPATH-Pfad (wenn sich die Klasse, die Sie schreiben, im selben Java Paket wie die Ressourcendatei selbst befindet, d. H. com.path.to):


getClass().getResourceAsStream("file.txt");
4
Jiri Patera