Dateien erstellen/ bearbeiten/ lesen

  • Themenstarter Themenstarter moon_bat
  • Beginndatum Beginndatum
M

moon_bat

Gast
Hallo,

ich habe mich mit einem Tutorial auf Youtube beschäftigt, in dem es darum ging:
https://www.youtube.com/watch?v=D-7XPvWUfHY&list=PL71C6DFDDF73835C2&index=44
- prüfen ob eine Textdatei existiert
- Datei erstellen
- aus Datei lesen
- in Datei schreiben

Das erste Programm funktionierte (nachdem ich rausfand, wie beim Mac der Pfad angegeben wird), wunderbar. Als es jedoch darum ging, eine Datei zu erstellen usw. bekam ich bei der Ausführung immer folgende Fehlermeldung:

java.io.FileNotFoundException: /User/lydiaroscher/Desktop/test2.txt (No such file or directory)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
at java.io.FileOutputStream.<init>(FileOutputStream.java:70)
at java.util.Formatter.<init>(Formatter.java:1915)
at dateitest.main(dateitest.java:12)

Ich denke es ist wichtig zu erwähnen, dass ich die Programme an meinem MacBook geschrieben habe. Denn offenbar liegt es am Betriebssystem, jedenfalls funktionierte das Lesen aus einer Datei mit exakt dem gleichen Code an meinem Windows PC.

Hier also mein Quellcode
- prüfen ob eine Textdatei existiert:

Java:
import java.io.File;

public class dateitest {

	public static void main(String[] args) {
		File f = new File("/Users/mustermann/Desktop/text1.txt");
		if(f.exists()){
			System.out.println("Die Datei " + f.getName() + " existiert");
		}else{
			System.out.println("Die Datei gibt es nicht.");
		}
	}
}

- Datei erstellen:
Java:
	import java.io.File;
	import java.io.FileNotFoundException;
	import java.util.Formatter;

public class dateitest {

		public static void main(String[] args) {
			File f = new File("/User/mustermann/Desktop/test2.txt");
			if(!f.exists()){ 
				try {
					Formatter format = new Formatter("/User/mustermann/Desktop/test2.txt");
				} catch (FileNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

Wie gesagt, der erste funktioniert, der zweite und alle weiteren nicht, die poste ich aber erst mal nicht, wenn nicht unbedingt notwendig, da ich denke dass es sich um ein und den selben Fehler handelt und das nur unnütz viel Quellcode werden würde..

Ich hoffe ihr könnt mir helfen!
Vielen Dank schon mal und liebe Grüße!
 
Ich glaube kaum, dass das auf einem anderen OS funktioniert. Der Fehler steckt in Zeile 9 des zweiten Codes:
[JAVA=9]if(!f.exists()){ [/code]
Wenn die Datei NICHT existiert versuchst du sie mit dem Formatter zu lesen, das kann doch nicht funktionieren.
 
Falsch. Er versucht die Datei, wenn noch nicht vorhanden zu erstellen. Zumindest auf Windows funktioniert das auch.

Edit: Ich vermute mal (Teile) des Pfades existieren nicht. Vielleicht User und Users durcheinander gebracht?
 
Zuletzt bearbeitet:
Dann hatte Michael... mit seiner Nachfrage wohl doch recht. Ich tippe mal auf die unterschiedlichen Dateisysteme. Ich kenne Mac nicht, aber kann es sein, dass man für den Pfad Adminrechte benötigt oder er nicht existiert? Unter Windows würde es mich übrigens wundern, wenn diese Datei auf dem Desktop landet (ohne C: am Anfang), aber ich nehme mal an du hast den Pfad dann entsprechend angepasst.

Was man ausprobieren könnte, wäre relative Pfade zu verwenden, bzw. im selben Verzeichnis versuchen die Datei zu erstellen.
 
Die
Code:
FileNotFoundException
kann durchaus zu Misinterpretationen führen. Sie muss nämlich garnicht heißen, dass ein "File not found" ist. Schaut man sich die API-Doc zu dem von Dir verwendeten Konstruktor an, so liest man in der Sektion Exceptions folgendes: FileNotFoundException - If the given file name 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
Das kann so ziemlich alles sein. Ich würde hier speziell auf fehlende Dateirechte, nicht existenten Pfad oder einen erfolglosen Schreib-Lock tippen (Datei evtl woanders lesend geöffnet? Evtl. Streams/Reader nicht korrekt geschlossen?).
 
@ X5-599 ich danke dir, du hattest Recht, so ein blöder Fehler.. und ich habe Stunden damit verbracht den Fehler zu finden.. bei Users fehlte hinten das s.. -.-

Also den Formatter habe ich verwendet, weil das in dem Tutorial auch so gemacht wurde, ich bin aber gern für neue Vorschläge offen!

Offenbar wird der Formatter auf diese Weise „missbraucht“, dazu würde ich mich über eine genaue Erklärung freuen.
 
Die Klasse File bietet die Methode
Code:
createNewFile()
um eine Datei, falls noch nicht vorhanden zu erstellen. Funktioniert allerdings auch nur, wenn das Verzeichnis existiert.
 
Moin,

Funktioniert allerdings auch nur, wenn das Verzeichnis existiert
Genau - und auch der Pfad lässt sich ggf. ganz simpel erzeugen :

Java:
String strAktFile = strPfad + strFilename;
File fDir = new File(strPfad);
// falls angegebenes DIR nicht ex. --> erstellen 
if ( !fDir.exists() ) 
{
    // "mkdirs" erzeugt auch alle Unterverzeichnisse!!
    fDir.mkdirs();
} /* if */

Gruß
Klaus
 

Zurück
Oben