1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Deutsch
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Mit Java ein neues Verzeichnis anlegen

    • Frage
  • Unic0der
  • 29. Dezember 2003 um 23:13
  • Unerledigt
  • Unic0der
    21
    Unic0der
    Mitglied
    Reaktionen
    4
    Punkte
    4.699
    Beiträge
    835
    • 29. Dezember 2003 um 23:13
    • #1

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

    Code
    [size=10]
    File newDir = [b]new[/b] File([i]"C:\temp\"); [/i]
     
    [i][size=10][i]FileCopy.java:28: unclosed string literal
    		File newDir = new File("C:\temp\");
    							 ^
    FileCopy.java:29: ')' expected
    	 System.err.println( e.toString() + " Verzeichnis konnte nicht erstellt wer
    den - ein neues wird daher erstellt...");[/i][/size][/i]
    [i][size=10][i]										^
    2 errors
    [/i][/size][/i][/size]
    Alles anzeigen



    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 :winking_face: ).

    http://www.informatik-forum.at/showthread.php?t=66532

  • yrucrem
    4
    yrucrem
    Mitglied
    Reaktionen
    4
    Punkte
    129
    Beiträge
    25
    • 29. Dezember 2003 um 23:50
    • #2

    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!

  • Jensi
    28
    Jensi
    Mitglied
    Reaktionen
    141
    Punkte
    8.486
    Beiträge
    1.649
    • 30. Dezember 2003 um 00:06
    • #3

    Sehr portierbar ist das aber nicht...

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 30. Dezember 2003 um 00:20
    • #4
    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 ;)

    lg, Benjamin Ferrari, bookworm.at

  • Unic0der
    21
    Unic0der
    Mitglied
    Reaktionen
    4
    Punkte
    4.699
    Beiträge
    835
    • 30. Dezember 2003 um 01:33
    • #5

    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 :winking_face: )...

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

    http://www.informatik-forum.at/showthread.php?t=66532

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 30. Dezember 2003 um 02:45
    • #6
    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 :winking_face: )...

    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

    lg, Benjamin Ferrari, bookworm.at

  • Unic0der
    21
    Unic0der
    Mitglied
    Reaktionen
    4
    Punkte
    4.699
    Beiträge
    835
    • 30. Dezember 2003 um 09:27
    • #7

    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 :face_with_rolling_eyes: ...

    http://www.informatik-forum.at/showthread.php?t=66532

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 30. Dezember 2003 um 17:37
    • #8
    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 :face_with_rolling_eyes: ...

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

    C
    //---------------------------------------------------------------------------
    
    
    #pragma hdrstop
    #include <iostream.h>
    #include <fstream.h>
    //---------------------------------------------------------------------------
    
    
    bool FileCopy(char *, char *);
    
    
    #pragma argsused
    int main(int argc, char* argv[])
    {
    if( FileCopy("home made.bmp","copied bitmap.bmp") )
    cout<<"The file was copied"<<endl;
    else
    cout<<"The Copied Failed :("<<endl;
    system("pause");
            return 0;
    }
    
    
    bool FileCopy(char *filesource, char *filedestination)
    {
    char c;
    ifstream fin(filesource, ios::in | ios::binary); //the file to be read
    ofstream fout(filedestination, ios::out | ios::binary); //the file to be written to
    if(!fin && !fout)  //if both input file or output file fails return false
    return false;
    fin.seekg(0); //set to the beginning of the file im reading
    while(!fin.eof()){ //keep going until we reach the end of the file
    fin.get(c);  //get a character
    fout.put(c); //put the character in the otherfile
    }
    fin.close(); //closing file
    fout.close(); //closing file
    return true; //copy was good
    }
    //---------------------------------------------------------------------------
    Alles anzeigen

    un der 2te Treffer zeigt das ganze in C:

    C
    #include <fcntl.h>
    #include <sys\types.h>
    #include <sys\stat.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <io.h>
    
    
    int main(int argc,char *argv[])
    {
    	char buffer[512];
    	int inhandle,outhandle,bytes;
    
    
    	if(argc<3) {puts("Insufficient arguments");exit(0);}
    	inhandle=open(argv[1],O_RDONLY|O_BINARY);
    	if (inhandle==-1)
    	{
    		puts("Cannot Open File");
    		exit(0);
    	}
    
    
    	outhandle=open(argv[2],O_CREAT|O_BINARY|O_WRONLY,S_IWRITE);
    	if (outhandle==-1)
    	{
    		puts("Cannot Open File");
    		close(inhandle);
    		exit(0);
    	}
    
    
    	while(1)
    	{
    		bytes=read(inhandle,buffer,512);
    		if(bytes>0)
    			write(outhandle,buffer,bytes);
    		else
    		break;
    	}
    
    
    	puts("File Copied Successfully");
    	close(inhandle);
    	close(outhandle);
    
    
    	return (0);
    }
    Alles anzeigen

    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

    lg, Benjamin Ferrari, bookworm.at

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 30. Dezember 2003 um 22:41
    • #9

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

    lg, Benjamin Ferrari, bookworm.at

  • hal
    32
    hal
    Mitglied
    Reaktionen
    52
    Punkte
    11.122
    Beiträge
    2.208
    • 31. Dezember 2003 um 06:14
    • #10
    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!

  • Unic0der
    21
    Unic0der
    Mitglied
    Reaktionen
    4
    Punkte
    4.699
    Beiträge
    835
    • 31. Dezember 2003 um 11:46
    • #11

    Danke mal für die zahlreichen Antworten. Mich hat leider die Grippe voll erwischt und ich kann daher den Code jetzt nicht wirklich ausprobieren (tja, mit 40 Grad Fieber kann man halt nicht gerade super denken :winking_face: ).

    http://www.informatik-forum.at/showthread.php?t=66532

  • marX
    7
    marX
    Mitglied
    Reaktionen
    10
    Punkte
    460
    Beiträge
    88
    • 6. Januar 2004 um 19:38
    • #12
    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 :winking_face:

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 7. Januar 2004 um 12:33
    • #13
    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

    lg, Benjamin Ferrari, bookworm.at

  • Maximilian Rupp 27. Dezember 2024 um 12:08

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung

  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  • Deutsch
  • English
Zitat speichern