Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
zwar ist das "problem" nicht besonders akut, aber dennoch wundert es mich. habe jetzt xmal den text der api zu RandomAccesFile gelesen, aber bin immernoch nicht darauf gestoßen, dass mit dem konstruktor das übergebene file-objekt tatsächlich auf dem datenträger erstellt wird.
Creates a random access file stream to read from, and optionally to write to...
okay, ich dachte mir also, wenn er einen Strom zum lesen und/oder schreiben erstellen will geht das natürlich nur, wenn eine Datei existiert. also legt er sie folglich an. warum wirft die methode (oder besser: der konstruktor) dann aber eine FileNotFoundException, wenn die datei doch erstellt wird, falls sie noch nicht vorhanden ist?
ich check das net ???:L
grüße
[add:]
Code:
public static void main(String args[]) {
try {
File f = new File("C:\\temp\\test.txt");
RandomAccessFile raf = new RandomAccessFile(f, "rw");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
Throws:
FileNotFoundException - if the mode is "r" but the given file object does not denote an existing regular file, or if the mode begins with "rw" but the given file object does not denote an existing, writable regular file and a new regular file of that name cannot be created, or if some other error occurs while opening or creating the file
Also: da der Mode "rw" ist, gibt es zwei Möglichkeiten:
1. c:\temp\test.xml existiert nicht und kann auch nicht erzeugt werden (weil man z.b. keine Schreibrechte für das entsprechende Verzeichnis hat, oder weil das Verzeichnis nicht existiert)
2. c:\temp\test.xml existiert, kann aber nicht geöffnet werden (weil die Datei z.B. von einer anderen Applikation exklusiv geöffnet wurde)
Ich tippe mal auf den ersten Fall; gibt es das Verzeichnis c:\temp denn überhaupt?
RandomAccessFile liefert Dir RandomAccess auf ein File. Die Datei muss dazu natürlich existieren. Wie willst Du denn von einer Datei lesen oder in eine Datei schreiben, die gar nicht existiert? :roll:
Wenn Du also in eine neue Datei schreiben willst, dann musst Du das File vorher erst erzeugen:
Code:
File f = new File("C:/temp/test.txt");
if(!f.exists()) {
f.createNewFile();
}
Also: da der Mode "rw" ist, gibt es zwei Möglichkeiten:
1. c:\temp\test.xml existiert nicht und kann auch nicht erzeugt werden (weil man z.b. keine Schreibrechte für das entsprechende Verzeichnis hat, oder weil das Verzeichnis nicht existiert)
2. c:\temp\test.xml existiert, kann aber nicht geöffnet werden (weil die Datei z.B. von einer anderen Applikation exklusiv geöffnet wurde)
Ich tippe mal auf den ersten Fall; gibt es das Verzeichnis c:\temp denn überhaupt?
naja, bei mir wurde keine FNFException geworfen.
meine frage ist ja eigentlich, warum die methode eine werfen kann, wenn sie doch die datei erstellt, sollte sie nicht vorhanden sein. tritt ein fehler beim erstellen auf, wäre doch eine IOException oder SecurityException sinnvoller?
(und warum sie die datei überhaupt erstellt, denn in der api kann ich das so nicht lesen)
Oh, war mir nicht bekannt. Ist ja ne super Komfortfunktion, dass er die Datei dann erzeugt!
Aber Murray hats ja dann schon erklärt und es steht ja auch (bei näherem Hinsehen) in der API erklärt:
FileNotFoundException - if the mode is "r" but the given file object does not denote an existing regular file, or if the mode begins with "rw" but the given file object does not denote an existing, writable regular file and a new regular file of that name cannot be created, or if some other error occurs while opening or creating the file