Datei über relative Pfade einlesen

Diskutiere Datei über relative Pfade einlesen im Java Basics - Anfänger-Themen Bereich.
C

Caliburns

Hallo,

ich würde gern eine Bild Datei über einen relativen Pfad einlesen.
Folgende Ordnerstruktur liegt vor:

C:\Users\Max Mustermann\Workspace\Testordner\Unterordner\src\test\resources\image.jpg

Über

private static final String IMAGE_FILE = "\image.jpg";
imgTichy = ImageIO.read(new File(IMAGE_FILE));

versuche ich auf die Datei zuzugreifen. Bekomme jedoch immer "Cant read input file" geworfen.

Komischerweise bin ich bei einem anderen Projekt mit gleicher Struktur ebenfalls so vorgegangen und dort funktioniert es.....

Habe es schon in allen möglichen Einlesevarianten probiert, es kommt immer der o. g. Fehler oder "Zugriff verweigert".

Über absolute Pfade funktioniert alles ohne Probleme.

Danke
 
J

JustNobody

Die Funktion der relativen Pfade solltest Du noch einmal über Google etwas nachlesen oder damit experimentieren!

Mit einem führenden \ greifst Du auf das Root-Verzeichnis des aktuellen Laufwerks zu. Wenn Du also in dem angegebenen Pfad bist, dann bist du in c:\, d.h. du versuchst c:\image.jpg zu öffnen.

Mit einem führenden . greifst Du auf das aktuelle Verzeichnis zu. Also ein .\image.jpg würde auf die image.jpg Datei im aktuellen Verzeichnis zugreifen.

Dann musst Du aber auch aufpassen. \ ist das Escape Zeichen. In einem String müsstest Du also \\ schreiben, um einen Backslash zu bekommen. Aber in Java kannst Du generell den forward slash (/) verwenden. Dann würde der Code auch unter Unix-artigen Systemen funktionieren...
 
C

Caliburns

Ich versuche es schon seit 2 Stunden, wenn ich mal nicht "Cant read input file" bekomme, dann " Zugriff verweigert".....

Jetzt funktionieren nicht mal mehr die absoluten Pfade... "Zugriff verweigert". Ich habe es mal direkt auf die C-Platte gelegt.
Auch hier "Zugriff verweigert". Warum?

Auf welchen Ordner bezieht sich jetzt das "aktuelle Verzeichnis"?
 
Zuletzt bearbeitet:
H

httpdigest

Jeder Prozess hat ein "current working directory". Welches das genau ist, hängt davon ab, wie der Prozess gestartet wurde. Wenn du es aus einer IDE heraus startest, dann ist es vermutlich das Projektverzeichnis, also wahrscheinlich `C:\Users\Max Mustermann\Workspace\Testordner\Unterordner`.
Du kannst dir das current working directory auch ausgeben lassen:
Java:
try {
  System.out.println(new java.io.File(".").getCanonicalPath());
} catch (java.io.IOException e) {
  throw new RuntimeException("Geht nicht!", e);
}
In Dateisystempfaden bedeutet das Verzeichnis "." IMMER das aktuelle Verzeichnis.

Somit müsstest du vermutlich den Pfad `./src/test/resources/image.jpg` verwenden. (ja, Windows versteht auch forward Slashes, bzw. wird es durch Java in das richtige Format für das aktuelle Betriebssystem überführt).
 
J

JustNobody

Das ist das Verzeichnis, aus dem die Applikation gestartet wird. Also wenn Du es auf der Kommandozeile heraus startest, dann ist es das aktuelle Verzeichnis, in dem Du bist. IDEs machen dies teilweise unterschiedlich. Da habe ich schon einiges erlebt: Mal der Root-Ordner des Projektes, mal der Ausgabe-Ordner und mal auch der Ordner mit den Sourcen ...

Zeig den genauen Code. Wenn du mit \ arbeitest, dann bedenke auch den Hinweis, dass dies in einem String als Escape Zeichen genutzt wird.

Und Du kannst Dir den aktuellen Ordner auch ausgeben lassen: System.getProperty("user.dir")
oder gerne auch sowas: Paths.get(".").toAbsolutePath().normalize().toString();
oder gerne auch mit File oder FileSystems oder ....

Aber auch das Design sollte man sich gut überlegen. Was genau willst Du machen und warum ist das wichtig? Wenn Du nur eine Ressource laden willst, dann würde ich dies über den Classloader machen. Das wäre dann etwas in der Art:
ImageIO.read( ClassLoader.getSystemResource( "/image.png" ) );
==> Wichtig: Hier ist das kein Path der relativ zum aktuellen Verzeichnis gesucht wird sondern es wird auf dem Classpath gesucht, d.h. die Datei kann auch im jar File sein und so ...
 
C

Caliburns

Das ist alles nachvollziehbar, aber egal welchen Ansatz ich nehme, mir wird der Zugriff verweigert. Nichteinmal mehr absolute Pfade funktionieren mehr.
 
Thema: 

Datei über relative Pfade einlesen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben