1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Aus Java Unix Befehl aufrufen

Dieses Thema im Forum "OS X-Developer" wurde erstellt von car, 20.06.06.

  1. car

    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ß
     
  2. kauan

    kauan Stina Lohmann

    Dabei seit:
    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
     
  3. car

    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ß
     
  4. quarx

    quarx Hadelner Sommerprinz

    Dabei seit:
    17.04.05
    Beiträge:
    8.541
    Vor den String muss IMHO noch ein "sh -c ".
     
  5. car

    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
     
  6. kauan

    kauan Stina Lohmann

    Dabei seit:
    31.12.05
    Beiträge:
    1.043
    Das mag sicher stimmen, aber wieso willst du dann ueberhaupt Java verwenden?

    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
     
  7. car

    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ß
     
  8. quarx

    quarx Hadelner Sommerprinz

    Dabei seit:
    17.04.05
    Beiträge:
    8.541
    Ö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: ;)
     
  9. car

    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ß
     
  10. slayercon

    slayercon Meraner

    Dabei seit:
    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.
     
  11. quarx

    quarx Hadelner Sommerprinz

    Dabei seit:
    17.04.05
    Beiträge:
    8.541
    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.
     

Diese Seite empfehlen