• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Aus Java Unix Befehl aufrufen

car

Gast
Hi,

ich würde gerne aus einer Java Application heraus den Inhalt eines Ordners in einen weiteren kopieren. Dies dachte ich über:

Process p1 = Runtime.getRuntime().exec ("cp /Users/Desktop/test/* /Users/Documents/test2/" );

machen zu können.
Leider passiert garnichts. Ich nutze einen mac OS 10.4.
Gebe ich die in Anführungszeichen gesetzte Zeile in die bash ein, passiert genau die gewünschte Kopier Aktion.

Hat eine eine Ahnung, was ich falsch mache?

Gruß
 

kauan

Stina Lohmann
Registriert
31.12.05
Beiträge
1.043
Hi car

Also wenn du das wirklich mit Java machst, dann nutze doch die Faehigkeiten von Java, und fuehr damit keine Shell-Commands aus! Dann waerst du ausserdem plattformunabhaengig, was Java ja auszeichnet.
Google kann dir sicher helfen:
http://www.google.ch/search?q=java "copy files"

gruss
Jonathan
 

car

Gast
Hi,

danke für die Antwort. Du hast recht es wäre vielleicht die leichtere Lösung. Ich denke aber dass ich über die Shell Commands effizienter (schneller) arbeiten kann.
Hat jemand einen Vorschlag wie der Zugriff aussehen muss?

Gruß
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
Vor den String muss IMHO noch ein "sh -c ".
 

car

Gast
hi,

ich habe es schon mit der bash versucht. Leider führt es nicht zum Erfolg. Ich glaube eher es ist ein Zugriff Fehler. Weitere Vorschläge?

Gruß und Dank
 

kauan

Stina Lohmann
Registriert
31.12.05
Beiträge
1.043
car schrieb:
danke für die Antwort. Du hast recht es wäre vielleicht die leichtere Lösung. Ich denke aber dass ich über die Shell Commands effizienter (schneller) arbeiten kann.
Das mag sicher stimmen, aber wieso willst du dann ueberhaupt Java verwenden?

car schrieb:
Hat jemand einen Vorschlag wie der Zugriff aussehen muss?
Gugel hat das hier gefunden (java.io.File heisst die Klasse File):
Code:
[COLOR=navy][B]public[/B][/COLOR] [COLOR=navy][B]static[/B][/COLOR] [COLOR=navy][B]void[/B][/COLOR] copy(File source, File dest) [COLOR=navy][B]throws[/B][/COLOR] IOException [COLOR=navy]{[/COLOR]
     FileChannel in = null, out = [COLOR=navy][B]null[/B][/COLOR];
     [COLOR=navy][B]try[/B][/COLOR] [COLOR=navy]{[/COLOR]          
          in = [COLOR=navy][B]new[/B][/COLOR] FileInputStream(source).getChannel();
          out = [COLOR=navy][B]new[/B][/COLOR] FileOutputStream(dest).getChannel();
 
          [COLOR=navy][B]long[/B][/COLOR] size = in.size();
          MappedByteBuffer buf = in.map(FileChannel.MapMode.READ_ONLY, 0, size);
 
          out.write(buf);
 
     [COLOR=navy]}[/COLOR] [COLOR=navy][B]finally[/B][/COLOR] [COLOR=navy]{[/COLOR]
          [COLOR=navy][B]if[/B][/COLOR] (in != [COLOR=navy][B]null[/B][/COLOR])          in.close();
          [COLOR=navy][B]if[/B][/COLOR] (out != [COLOR=navy][B]null[/B][/COLOR])     out.close();
     [COLOR=navy]}[/COLOR]
[COLOR=navy]}[/COLOR]
gruss
Jonathan
 

car

Gast
hi,

mich würde trotzdem noch interressieren wo der Fehler liegt. Eigentlich sollte ich doch über obiges Zugriffsschema alle Befehle ausführen könne die ich auch über die bash ausführen kann. Oder?


Gruß
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
Öhm, stimmt denn der Pfad überhaupt? Im Beispiel hast Du /Users/Desktop und /Users/Documents benutzt, die gibt es beide nicht. Da fehlt mindestens in der Mitte der Benutzername... :oops: ;)
 

car

Gast
Hi,

die Pfade stimmen, sie sind im original länger. Ich habe sie hier gekürzt um keine ewig langen Details zu posten.

Gruß
 

slayercon

Meraner
Registriert
17.01.05
Beiträge
231
Schlag mich tot aber wenn ich ein File (schlampig) mit java einlese auf dem Mac dann muss ich den Pfad so schreiben :

Code:
String path = "//pathtoirgendwas";

Also am Beginn 2 Slashes weiss auch net warum ...

vielleicht hilfts ....

lg S.
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
car schrieb:
die Pfade stimmen, sie sind im original länger. Ich habe sie hier gekürzt um keine ewig langen Details zu posten.
Aber es spielt sich alles in _Deinem_ Benutzerordner ab?

Das mit den Doppel-Slashes glaube ich nicht (da ja der Befehl in der Shell ausgeführt wird). Ich habe gerade mal
Code:
Process p = Runtime.getRuntime().exec("touch /Users/meinname/touchtest.txt");
getestet, das klappt bei mir einwandfrei.