# Dateipfad mit Leerzeichen



## Jonny_ (15. Sep 2004)

Servus!

Ich bin dabei eine Art Texteditor mit Spezialfunktionen zu basteln. Eine Funktion des Progs ist es, Dateien zu verschlüsseln und den verschlüsselten Text in eine andere Datei an der selben Stelle (Ordner) zu erzeugen.
Den Pfad für die neue Datei wird von der ursprünglichen File geholt (getAbsolutePath() )
Dabei bin ich auf folgendes Problem gestossen:
Wenn ich unter Windoof arbeite und ich z.B. eine Datei in Eigene Dateien verschlüsseln möchte, funzt das Prog nicht, da der Pfad u.a. "Dokumente und Einstellungen" enthält, also Leerzeichen. Damit hat java wohl Probleme...

Hat jemand eine Idee, wie man das umgehen kann? oder gibt es eine Alternative zu getAbsolutPath()?


----------



## EagleEye (15. Sep 2004)

naja eine idee wäre das du mit urls arbeitest und leerzeichen durch %20 ersetzt


----------



## Stefan1200 (15. Sep 2004)

Hmm, bin mir jetzt nicht sicher, aber ich hatte keine Probleme mit Leerzeichen in Pfaden.
Müsste ich aber zuhause ausprobieren.


----------



## Sky (15. Sep 2004)

Wo liegen denn genau die Problem?? Gibt es irgendwelche Meldungen/Fehler?

Prinzipiell ist mir das genannte Problem nicht bekannt. Ich kann auf meinem System ohne Probleme Dateien einlesen, auch wenn der Pfad Leerzeichen besitzt, ohne dass ich URL verwende.

Grüsse, Sky


----------



## Heiko (15. Sep 2004)

sky80 hat gesagt.:
			
		

> Wo liegen denn genau die Problem?? Gibt es irgendwelche Meldungen/Fehler?
> 
> Prinzipiell ist mir das genannte Problem nicht bekannt. Ich kann auf meinem System ohne Probleme Dateien einlesen, auch wenn der Pfad Leerzeichen besitzt, ohne dass ich URL verwende.
> 
> Grüsse, Sky



Dem kann ich nur zustimmen.

Gib mal die Fehlermeldung hier ein, das hilft weiter.


----------



## jonny_ (15. Sep 2004)

Ok, dann kommt hier mal etwas Quellcode:

Zuerst wird eine Datei mit JFileChooser geöffnet, etwa so (in model werden sämtliche Daten gespeichert, chooser ist ein Objekt von JFileChooser, c die ContentPane):


```
int returnVal = chooser.showOpenDialog(c);
if(returnVal == JFileChooser.APPROVE_OPTION) 
{
    model.setReadFile(chooser.getSelectedFile())
}
```

Wenn Verschlüsselt wird, soll der verschlüsselte Text in der Datei  gespeichert werden und zwar an der gleichen Stelle, wie die urspüngliche Datei, daher brauche ich erstmal den Pfad:


```
String pfad = "";
// zuerst wird geprüft, ob die Datei im Ordner des Projekts steht, dann bleibt der Pfad ""
if (model.getReadFile().getPath().length() != model.getReadFile().getName().length())
{
    //ist dies NICHT der Fall, dann wird der Pfad gesetzt: Absoluter Pfad abzüglich FileName
    String pfadTmp = model.getReadFile().getAbsolutePath();
    String nameTmp = model.getReadFile().getName();
    for (int i = 0; i < pfadTmp.length() - nameTmp.length(); i++)
    {
        pfad += pfadTmp.charAt(i);
    }
}
//anschliessend soll die Datei gesetzt werden. Die methode gibt boolean zurueck, ob der Vorgang erfolgreich war
if (model.setWriteFile(pfad+"test123.txt"))
{
   // ...
}
else
    System.out.println("Fehler"); 
//Das Programm landet immer hier, wenn ich einen Pfad mit Leerzeichen oder Umlauten gewählt habe
```

Und hier noch die Methode zum Setzen der WriteFile:

```
public boolean setWriteFile(String name)
{
    boolean ok = false;
    File tmp = new File(name);
    if (tmp.exists() && tmp.canWrite())
    {
        writeFile = tmp;
        ok = true;
    }
    return ok;
}
```


Was ist denn der Fehler? Es funktioniert ja, wenn ich eine Pfad nehme, der keine Leerzeichen und Umlaute enthält ???:L


----------



## Heiko (15. Sep 2004)

Zeigt er eine Fehlermeldung an?

Ich kann auf die schnelle keinen Fehler erkennen.


----------



## Sky (15. Sep 2004)

Was geben denn 

```
tmp.exists()
```

und 


```
tmp.canWrite()
```

zurück?


----------



## thE_29 (15. Sep 2004)

du könntest den befehl dir /x parsen und so die tilde pfade zurückbekommen oder du machst es auf gut glück und probst, wenn das verz > 8 oder ein leerzeichen enthält machst du C:\eigene~1\


----------



## Jonny_ (15. Sep 2004)

tmp.exists() sollte true zurückgeben, wenn die Datei existiert und tmp.canWrite() sollte true zurückgeben, wenn die Datei beschreibbar ist.

Oh, jetzt hab ich's:

Habe die setWriteFile(String name) geändert:

```
public boolean setWriteFile(String name)
{
    boolean ok = false;
    File tmp = new File(name);
    writeFile = tmp;
    ok = true;
    return ok;
}
```

Das mit dem Rückgabewert ist jetzt zwar sinnlos, aber der Fehler war wohl wirklich tmp.exists() und/oder tmp.canWrite()!

Danke für die Hilfe!


----------



## Heiko (15. Sep 2004)

Hilfe kriegst du hier immer, aber Coding hilft, wie du gesehen hast ;-)


----------

