# || Wie speichert man Dateien wo der Pfad als Link(UNIX)...



## quadro (18. Jan 2007)

angegeben ist....? Ich habe mal den Titel geändert (||| Pfade Mac - Schreitisch == Desktop != Schreibtisch ?)


HeY Forum,
ich heute mal wieder mit Namen....

Also meine Frage: Kennt sich jemand mit Pfaden aufm Mac aus? Mein Problem ist folgendes: Ich möchte über nen FileChooser nen Ort zum Speichern auswählen (z.B. Schreibtisch).  Ich erstelle dann aus dem Pfad des Ordners, den ich über den FileChooser bekommen habe ein neues FileObjekt:


```
new File(file.getPath() + File.separator + foo.txt)
```
 

Das funktioniert unter Windoof und Linux(ich programmiere unter X) Sobald ich aber auf nem Mac als Speicherort den Schreibtisch oder Dokumente angebe, funktioniert das nicht, "No such file bla bla bla Exception...."
Ich dachte OK, falsch den Dateinamen zusammengesetzt, kann aber nicht sein da die Pfade beim Mac gleich sind wie unter unix und da funktioniert alles.
Ich habe dann gecheckt, das es den Ordner "Schreibtisch" oder "Dokumente" nicht gibt, sondern "Desktop" und "Documents". Schreibtisch und Dokumente sind also nur Referenzen für "Desktop"....
Über den FileChooser kann ich aber nicht auf "Desktop" zugreifen, sondern nur auf "Schreibtisch". Ich möchte aber auf dem Schreibtisch speichern... Es ist natürlich klar, das es immer nen fehler gibt, wenn es Schreibtisch als Ordner nicht gibt...


Hat jemand ne Idee wie man das umgehen kann bzw. ob es ein mapping gibt welches ich einsetzen kann? Code?



THX!

 ???:L 


Quadro***


----------



## mephi (18. Jan 2007)

also mein desktop auf dem mac finde ich unter

/Users/meinusername/Desktop/
und ich kann da normalerweise auch speichern


----------



## quadro (18. Jan 2007)

mephi hat gesagt.:
			
		

> also mein desktop auf dem mac finde ich unter
> 
> /Users/meinusername/Desktop/
> und ich kann da normalerweise auch speichern



Ja das ist mir klar aber wenn ich mit dem JFileChooser den Schreibtisch angebe, was ein Alias für "Desktop" ist, funktioniert das nicht, da das nur ein Aliasname für den Ordner ist. Speicher ich auf dem Schreibtisch landen die Dateien per "softlink" im Ordner "Desktop". Oder gibt es noch nen Ordner "Schreibtisch" !?! Ich rede natürlich von Mac Os interna und nicht von meinem Prog. Du kannst aus itunes etc. speichern, und ich will das auch

 :!:  Schreibtisch ist ein Alias für den Ordner "Desktop"  :!: 

Mac OS X 10.4.x bietet mir aber diesen Ordner "Desktop", beim "Speichern unter" Dialog,  nicht an sondern nur Schreibtisch. Die Leute die das Prog. benutzen sollen, sind auch nicht in der Lage den Pfad mit der Hand zu setzen, brauchen also den Dialog.
Mit dem Ordner Dokumente (Documents) verhällt sich das ähnlich....

Vielleicht liegt das auch an java, und ich muss nen speziellen "Modus" für den FileChooser wählen aber das ist ja auch meine Frage!

Hab leider/glücklicherweise keine Mac zu hause und kann das immer nur auf Arbeit testen daher kann ich jetzt nicht noch mal nachschauen, ob ich vielleicht wirres Zeug rede. Ich denke aber nicht. Mir kommt es so vor als wenn immer ich so komische Probleme habe, bzw. der Einzige bin!  :lol:


----------



## mephi (18. Jan 2007)

so fühl ich mich auch immer *g*
du kannst ja dem user vorgaukeln er speichert unter schreibtisch, dabei speichert er aber unter desktop..


----------



## quadro (18. Jan 2007)

mephi hat gesagt.:
			
		

> du kannst ja dem user vorgaukeln er speichert unter schreibtisch, dabei speichert er aber unter desktop..




Du bis cool, das war auch ne Idee habe die aber schnell verworfen, da ich mich ja selber um das Mapping kümmern müsste. Das kann nicht sein.  

Erklärung:

Wenn der User den Schreibtisch als Speicherort wählt, müsste ich dann den Pfad prüfen und falls Schreibtisch gewählt wurde das dann gegen "Desktop" austauschen......Das ist sehr ungünstig. Was mache ich mit den Chinesischen Versionen von Mac Os oder oder oder....Und den verschiedenen Links die Apple(oder UNIX) da noch verwendet....

Warscheinlich wäre meine Frage eher: "Wie speichert man Dateien wo der Pfad als Link(UNIX) angegeben ist?"


Aber danke trotzdem....  :wink:


----------



## quadro (18. Jan 2007)

Ich bräuchte so etwas.... Kennt jemand so eine Implementierung?




```
/**
* A MacFile is just a File that provides some Mac-specific and
unix-specific methods.
*/
public class MacFile extends File {

public MacFile(String path) {
super(path);
}

/**
* Makes a MacFile from a File.
*
* @param file the file to make into a MacFile
* @return the new MacFile
*/
public static MacFile makeMacFile(File file) {
return new MacFile(file.getPath());
}

/**
* Returns true if this is an alias file.
*
* @return true if this is an alias file
*/
public boolean isAliasFile() {
return false;
}

/**
* Finds the MacFile referred to by this File.
*
* @return the MacFile referred to or null if it's not there
*/
public MacFile aliasReferent() {
return null;
}

/**
* Makes a new alias file pointing to to this File.
* If the aliasPath argument is a directory,
* then the new alias will be in that directory with the same
name as this File.
*
* @param aliasPath the path for the new MacFile or the path
* to the directory where it is to be created
* @return a new MacFile for the alias created
*/
public MacFile newAlias(File aliasPath) {
return null;
}


/**
* Returns true if this is a symbolic link.
*
* @return true if symbolic link
*/
public boolean isSymbolicLink() {
return false;
}

/**
* Returns a MacFile representing the path referred to by this File,
* whether anything is there or not.
*
* @return the MacFile referred to
*/
public MacFile symbolicLinkReferent() {
return null;
}

/**
* Makes a symbolic link pointing to to this.
* If the symbolicLinkPath argument is a directory,
* then the new symbolic link will be in that directory with the
same name as this.
*
* @param symbolicLinkPath the path for the new MacFile or the path
* to the directory where it is to be created
* @return a new MacFile for the alias created
*/
public MacFile newSymbolicLink(File symbolicLinkPath) {
return null;
}

}
```

So was in der Art wäre schön, aber man findet dazu nichts im Netz...


ThX


----------



## thE_29 (19. Jan 2007)

Naja, ob etwas ein Symlink ist kannst du rausfinden mit 

File.getCanonicalPath()  und getAbsolutePath() was anderes zurückliefern!


----------



## quadro (19. Jan 2007)

Ok aber bekomme ich auch raus, wohin der Link zeigt? Weil abfragen obs nen Link ist oder nicht, ist halt mein kleinstes Problem. Ich kann mich auch selber um die Mappings kümmern, aber das wäre  "hardgecoded"  :roll:  und das ist schlecht.... Danke aber für den Hinweis!


THX


----------



## thE_29 (19. Jan 2007)

getCanonicalPath liefert glaube ich den richtigen Pfad!

getAbsolutePath eben den du angegeben hast!


----------



## quadro (19. Jan 2007)

Hmmm das könnte ich mal probieren, hab zwar gerade keinen Mac zu Hand (zum Glück), aber linux tuts ja auch  :bae: 

ThX for the hint!


----------



## quadro (22. Jan 2007)

Unter Linux liefert, wie schon richtig genannt wurde, File.getCanonicalPath() den Pfad eines symbolischen Links auf einen Ordner oder eine Datei. File.getCanonicalPath() liefert außerdem auch bei vorhandenen Ordnern oder Dateien den richtigen Pfad auf diesen Dateien. 
Ich werde das morgen unter Mac OS X auch noch einmal prüfen und falls das funktioniert, ist dieses Thread auch gelöst. Ich gehe aber davon aus, das der "Schreibtisch" ein symbolischer Link auf den Ordner "Desktop" ist.... :meld:

Vielen Dank an die Helfer!



Quadro***


----------



## quadro (25. Jan 2007)

Also das Problem ist gelöst..... Es lag nicht an FileWriter sondern am FileChooser den ich genutzt habe um den Speicherort zu wählen.  Man lernt halt nie aus, vor allem nicht wo man Fehler findet, die man ganz woanders vermutet...

ALSO:


```
File.getCannonicalPath()
```

liefert das richtige Ergebnis und kann symbolische Links auflösen!


 :bae:


----------

