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.
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());
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());
Ich finde diesen einzeiligen Code am effizientesten und nützlichsten:
File file = new File(ClassLoader.getSystemResource("com/path/to/file.txt").getFile());
Klappt wunderbar.
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");