Mit Java ein neues Verzeichnis anlegen

  • Also: Ich will mittels Java ein neues Verzeichnis anlegen - bekomme aber beim kompilieren immer folgende Errors:



    Ich check echt nicht was da falsch sein soll. IMHO nur ne Kleinigkeit die ich einfach übersehen habe :) :hewa: .

    EDIT: Wenn ich Zeile 28 auskommentiere funktioniert übrigens alles Bestens (tja, dummerweise ist eben zum erstellen eines Verzeichnisses eben diese Zeile wichtig ;) ).

  • Man muss die Backslashes escapen ("C:\\temp\\"). Denn wenn am Ende ein \" steht, glaubt der Compiler, dass man ein " im String haben will und nicht, dass an dieser Stelle der String zu Ende sein soll.

    Damn, here I was, minding my own business, just enjoying my second amendment rights, and you people have to FREAK out on me!

  • Zitat von yrucrem

    Man muss die Backslashes escapen ("C:\\temp\\"). Denn wenn am Ende ein \" steht, glaubt der Compiler, dass man ein " im String haben will und nicht, dass an dieser Stelle der String zu Ende sein soll.

    Am besten ist es, die plattformspezifischen Trennzeichen gleich durch plattformunabhängige Platzhalter zu ersetzen, also:

    Code
    String fs = System.getProperty("file.separator");
    String userHome = System.getProperty("user.home");
    
    
    File newDir = new File(userHome+fs+"temp"+fs);
    
    
    dann läufts nämlich auch unter MacOS X ;)
  • Egal welchen Lösungsvorschlag von hier ich anwende: Fehler beim kompilieren bekomme ich keinen mehr - aber Verzeichnis wir auch keines erstellt.


    Wenn ich z.B. die Codezeile File newDir = new File("C:\\temp\\"); müsste doch ein leeres Verzeichnis temp auf C: erstellt werden, oder? Mehr code ist doch nicht für diese Aktion notwendig (oder vielleicht doch ;) )...

    Oder rührt das Problem vielleicht daher dass ich diese Codezeile in einem Catch-Block stehen habe?

  • Zitat von MacOS X

    Egal welchen Lösungsvorschlag von hier ich anwende: Fehler beim kompilieren bekomme ich keinen mehr - aber Verzeichnis wir auch keines erstellt.


    Wenn ich z.B. die Codezeile File newDir = new File("C:\\temp\\"); müsste doch ein leeres Verzeichnis temp auf C: erstellt werden, oder? Mehr code ist doch nicht für diese Aktion notwendig (oder vielleicht doch ;) )...

    Oder rührt das Problem vielleicht daher dass ich diese Codezeile in einem Catch-Block stehen habe?


    Code
    File newDir = new File("C:\\temp\\");


    erstellt lediglich ein FileObject, die dazugehörige Datei muss aber nicht auf der festplatte existieren.

    Code
    newDir.createNewFile()

    erstellt eine neue Datei und

    Code
    newDir.mkdir()

    ein Verzeichnis.

    dann gibt es da noch

    Code
    newDir.mkdirs()

    , das legt alle im dem Pfad vorkommenden Verzeichnisse an, die noch nicht existieren.

    Das beste ist es, bei solchen Fragen erst einmal in der API Documentation nach der jeweiligen Klasse zu suchen, da sind all diese Methoden ausführlich beschrieben.

    lg, bejo

  • Zitat von MacOS X

    Mich würde als Vergleich jetzt auch noch ein Samplecode zum kopieren von Dateien/Verzeichnissen für eine C++ Konsolenanwendung interessieren.
    Habe im Netz leider nichts passendes gefunden :rolleyes: ...

    Also wenn ich bei google nach 'copy file c++' suche, steht gleich im ersten link dieser beispielcode:

    un der 2te Treffer zeigt das ganze in C:

    Da C und C++ Programme aber meistens eh nur für eine Platform entwickelt werden, benutzt man in der Praxis meistens einfach die systemspezifischen programme zum copieren, also zum Beispiel:

    Code
    system("cp -r dir1 dir2");

    geht in Java natürlich auch:

    Code
    Process p = Runtime.getRuntime().exec("cp -r dir1 dir2");

    lg, bejo

  • wegen der probleme mit der Forumssoftware ist mein letztes posting von 30.12, 17:37 ist auf der forumsicht 'unsichtbar', daher dieses posting, damit MacOSX sieht das eine Antwort gekommen ist...

    ansonsten ignorieren...

  • Zitat von a9bejo

    Da C und C++ Programme aber meistens eh nur für eine Platform entwickelt werden, benutzt man in der Praxis meistens einfach die systemspezifischen programme zum copieren, also zum Beispiel:

    Code
    system("cp -r dir1 dir2");

    geht in Java natürlich auch:

    Code
    Process p = Runtime.getRuntime().exec("cp -r dir1 dir2");

    Das ist aber sehr 3v1l, wenn die Pfade vom Benutzer übernommen werden, dann muss man zuerst mal das shell escape vornehmen, sonst kann da viel Böses passieren (das passiert leider viel zu oft, ich hab hier viel zu viel Software, die es aufstellt, wenn man ein Leerzeichen irgendwo im Pfad hat...).
    Aber ansonsten stimmt es schon, Verzeichnisse duplizieren ist viel zu kompliziert in reinem C.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Zitat von a9bejo

    Am besten ist es, die plattformspezifischen Trennzeichen gleich durch plattformunabhängige Platzhalter zu ersetzen, also:

    Code
    String fs = System.getProperty("file.separator");
    String userHome = System.getProperty("user.home");
    
    
    File newDir = new File(userHome+fs+"temp"+fs);
    
    
    dann läufts nämlich auch unter MacOS X ;)

    also "\"+char ist NICHT plattformspezifisch, sondern hängt von der jeweiligen verwendeten sprache ab!
    2. wenn ein "\" Zeichen gesetzt werden will muss mann desshalb ein doppeltes "\\" machen, weil das erste "\" dem Compiler sagt, dass ein "steuerzeichen" (-> z.B. "\n", "\r", "\t") ausgegeben werden soll. das 2. "\" sagt dem Compiler dann, dass das Zeichen "doch nur" ein "\" sein soll *gg*

    klingt blöd, is aber so ;)

  • Zitat von marX

    also "\"+char ist NICHT plattformspezifisch...

    Damit hast Du natürlich völlig recht, ich verstehe aber ehrlich gesagt nicht so ganz, was das mit meinem Beitrag zu tun hat(?).

    Das im Originalposting mit \" die Anführungszeichen escaped wurden hat yrucrem ja schon beschrieben:

    Zitat von yrucrem

    Man muss die Backslashes escapen ("C:\\temp\\"). Denn wenn am Ende ein \" steht, glaubt der Compiler, dass man ein " im String haben will und nicht, dass an dieser Stelle der String zu Ende sein soll.

    Ich habe lediglich hinzugefügt, das sein Code nicht plattformunabhängig ist.

    lg, bejo

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!