Dazu sollte man aber wissen, wie in Java Pfadangaben funktionieren, also testen wir das kurz (ich arbeite auf Linux, also schauen meine Ausgaben anders aus als unter Windows):
Das heißt also:
package post07;
import java.io.File;
import java.io.IOException;
public class FileTest {
public static void main(String[] args) {
//Eine relative Pfadangabe. Unter Linux ist das eine Angabe, die nicht mit "/" beginnt.
//Dieser Pfad ist relativ zum Projektverzeichnis
File f1 = new File("relativ");
//Hier kommt "relativ" zurück, also der Pfad, den man oben angegeben hat
System.out.println(f1.getPath());
//Hier kommt der absolute Pfad zurück. In meinem Fall ist das
//"/home/clemens/workspaces/SE/ProggersDiary/relativ"
//Unter Windows würde das mit dem Laufwerksbuchstaben beginnen, und die einzelnen Ordner würden mit "\"
//getrennt.
System.out.println(f1.getAbsolutePath());
//Der erste Teil ist der Ordner, zu dem die zweite angabe relativ sein soll
//System.getProperty("user.home") liefert dabei das Home-Directory ("/home/clemens" bei mir)
File f2 = new File(System.getProperty("user.home"), "relativ");
//Der Pfad und der absolute Pfad sind in diesem Fall gleich, weil die erste Angabe absolut war
System.out.println(f2.getPath());
System.out.println(f2.getAbsolutePath());
//Hier benutze ich ".." um mich in den Ordner "/home" zu bewegen
File f3 = new File(System.getProperty("user.home"), "../relativ");
//Hier bemerkt man das aber noch nicht. beide Pfade sind "/home/clemens/../relativ"
System.out.println(f3.getPath());
System.out.println(f3.getAbsolutePath());
try {
//Im canonical path wird das dann eliminiert, außerdem werden symlinks azfgelöst. Da diese Operation
//Zugriff auf das Filesystem benötigt, braucht man hier einen try-catch-block
//das ergebnis ist "/home/relativ"
System.out.println(f3.getCanonicalPath());
} catch(IOException ex) {}
}
}
- Relative Angaben sind normalerweise relativ zum Projektverzeichnis (Wenn das Programm in ein jar-File gepackt ist, ist das wieder nicht möglich, also ist diese Variante stark von der Laufzeitumgebung abhängig!)
- Alternativ kann man einen Pfad Angeben, auf der die relative angabe basiert. Diese Angabe kann sowohl ein String (wie im Beispielcode) als auch ein File-Objekt sein
- Natürlich sind auch direkt absolute Angaben möglich
exists()
isFile()
isDirectory()
Wenn ein File nicht existiert, kann es erzeugt werden (wobei natürlich eine Exception auftreten kann):
createNewFile()
mkdir()
mkdirs()
Eine Entsprechung von mkdirs für files gibt es nicht, aber sie kann einfach erzeugt werden:
try {So, das nächste mal werden wir wirklich in Dateien schreiben ;)
//Woher auch immer das File kommt...
File f = ...;
//Der Ordner, der die Datei enthalten soll, wird mit mkdirs erzeugt
f.getParentFile().mkdirs();
//Jetzt existiert der Ordner garantiert, also kann man createNewFile benutzen
f.createNewFile();
} catch(IOException ex) {
//Falls irgendwo was schief gegangen ist, sieht man es hier
ex.printStackTrace();
}
Keine Kommentare:
Kommentar veröffentlichen