neues JAVA-Problem

  • Themenstarter Themenstarter Shlyakh
  • Beginndatum Beginndatum
S

Shlyakh

Guest
Habe folgendes Problem. Ich will eine datei schreiben, mit einer Mehtode, die sich write() nennt.

Wenn ich den Pfad übergebe, dann gibt es in dem Pfad nur einfache Backslashes, das mag Windows nicht. Wenn ich dann mit einer replace-Methode die \ mit \\ ersetzen will, akzeptiert er den Pfadnamen dennoch nicht. Ich hoffe mal, dass diese Frage an dieser Stelle nicht fehl am Platze ist.

Code:
public void write(String path){
		

		//Create the logfile if not exists.
		try {  
			System.out.println(path);
			path = path.replace("\\","\\\\");
		        System.out.println(path);
			file = new File(path);
			
			// if file doesnt exists, then create it
			if (!file.exists()) {
				file.createNewFile();
			}


Ich habe keine ahnung, warum das der Fall ist :(


Ich kann das Resultat des Codesnippets hier oben angeben:


C:\Users\MEINNAME1\Desktop\regeln\log.txt

C:\\Users\\MEINNAME1\\Desktop\\regeln\\log.txt

java.io.IOException: Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch
at java.io.WinNTFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(Unknown Source)
at inout.mWriter.write(mWriter.java:25)
at inout.mReader.read(mReader.java:49)
at core.Main.main(Main.java:16)
 
path = path.replace("\\","\\\\");
Das ist doppelt gemoppelt.
\\ ist nur die Escape-Sequenz für einen Backslash in String-Literalen von Java. Also Strings, die direkt im Code definiert werden und beim Auführen des Codes einen Backslash "\" enthalten müssen.
Manche Sprachen bieten hierfür ganz andere Syntax - z.B Raw-Strings, so dass man "foo = r'hello\world\' schreiben kann.
Windows selbst mag/braucht doppelte Slashes in den Pfaden nicht wirklich (und kann im übrigen seit Urzeiten mit "/" umgehen) ;)
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx

Zum Problem: wo kommt der String her? Ggf. ist da irgndwo ein non-printable Zeichen (z.B ein line-break am Ende) welches zuerst entfernt werden muss - also mal mit String.trim probieren.
 
Zuletzt bearbeitet:
Hm...ich hatte das neulich erst, Windows kann auch mit einfachen \ umgehen. Zumindest hat das bei mir funktioniert, sowohl Dateien erstellen als auch beschreiben. Da mußte nichts ersetzt werden.

Ich kenne die Exception aber gut. Ich habe vor kurzem ein ganzes Wochenende damit verbracht, den Fehler zu finden. Der Grund war, wie CDW es schon andeutete, ein unprintable Zeichen im Pfad-String. In meinem Fall war es ein Leerzeichen, das in der Eingabezeile standardmäßig am Beginn drinstand.

Ich bin fast wahnsinnig geworden...


Existiert denn der Ordner, in dem du die Datei reinschreiben willst? Das übergeordnetes Verzeichnis muß existieren.
 
Hm...ich hatte das neulich erst, Windows kann auch mit einfachen \ umgehen.
Du meinst wohl eher ein /
also z.B C:/Users/MEINNAME1/Desktop/regeln/log.txt

Existiert denn der Ordner, in dem du die Datei reinschreiben willst? Das übergeordnetes Verzeichnis muß existieren.
Würde das Verzeichnis nicht existieren müsste eine
Code:
java.io.IOException: No such file or directory
geworfen werden.

Wie CDW schon schreibt würd ich mir den String in path nochmal genau anschauen.

Übrigens:
http://docs.oracle.com/javase/6/docs/api/java/io/File.html#createNewFile()
Atomically creates a new, empty file named by this abstract pathname if and only if a file with this name does not yet exist.
Du kannst dir die Prüfung ob die Datei schon existiert sparen.
 
Zuletzt bearbeitet:
Zurück
Oben