Anfänger Fragen zu Java

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Anfänger Fragen zu Java

    Hallo,

    in der Schule lernen wir seit ein paar Monaten endlich Java, und da jetzt Ferien sind mache ich zuhause weiter aber kann natürlich meinen Lehrer nicht mehr fragen, deswegen müsst ihr jetzt mal dran glauben.

    Also erstmal vorweg die Programme laufen im Terminal, habe also noch keine GUI.
    Ich möchte das der Benutzer einen Pfad zu einer Datei eingibt und dabei das Tilde Zeichen durch den Pfad zum Benutzer Ordner ersetzt.
    Hier mal mein Code:

    Quellcode

    1. for (i=0; i<str.length(); i++)
    2. {
    3. if(str.charAt(i) == '~')
    4. {
    5. j=i;
    6. str2 = "/Users/metalsnake";
    7. for (; j<str.length(); j++)
    8. {
    9. k=str2.length()+1;
    10. str2.charAt(k) = str.charAt(j);
    11. }
    12. }
    13. }
    Alles anzeigen


    an der Stelle str2.charAt(k) meckert der Compiler das er da gerne eine Zahl haben möchte und keine Variable, aber in der 3ten Zeile klappt es doch auch mit str.charAt(i), wieso geht da da aber weiter unten wieder nicht?

    Wie frage ich eigentlich vom System den Benutzernamen hab so dass das Programm auch auf anderen Rechnern laufen würde?
  • schon mal die Doku zur Klasse String gelesen? :)

    Da gibt es die Methode: public String replaceFirst(String regex, String replacement), damit reduziert sich Dein Programm auf die folgende Zeile:

    Quellcode

    1. str = str.replaceFirst("~","/Users/metalsnake");

    Nun zu Deinen Fragen. Die Zeile

    Quellcode

    1. if(str.charAt(i) == '~')
    funktioniert deshalb, weil hier nur der Character an Stelle i im String str mit dem Character '~' verglichen wird.

    Die Zeile
    str2.charAt(k) = str.charAt(j);

    kann nicht funktionieren, da ein String Object bei seiner Erstellung immer einen festen Inhalt hat, welcher nicht verändert werden kann. Um einen String zu verändern, muss somit immer ein neues String Object gebildet werden, z.B. in der Art str = new String(str + " dies soll angefügt werden"); oder kurz str = str + " dies soll angefügt werden";. Wenn man sich verschiedene Methoden der Klasse String anschaut, welche den Inhalt eines Strings verändern, erkennt man schnell, dass diese Methoden immer einen String als Rückgabewert haben. Hier ist es wichtig, diesen Rückgabewert auch anzunehmen!. So wird nur die 2. der folgenden Zeilen den gewünschten Erfolg haben, obwohl der Java Compiler z.B. beide Zeilen ohne Probleme kompilieren wird.

    Quellcode

    1. str.replaceFirst("~","/Users/metalsnake");
    2. str = str.replaceFirst("~","/Users/metalsnake");
    Warum? Das neue String Object, welches durch die Methode replaceFirst() erzeugt wird, wird in der 1. Zeile nicht angenommen und somit direkt wieder verworfen!

    Für grössere Änderungen an einem String sollte man jedoch die Klasse StringBuffer verwenden!

    Das Home-Verzeichnis des Users solltest Du mit

    Quellcode

    1. String home = System.getProperties().get("user.home");
    ermitteln können. Siehe auch Doku der Klasse System. :)
  • Danke schön :)
    Die Doku hatte ich mir zwar angeguckt aber nur Bahnhof verstanden, ich schätze die versteht man als Anfänger nicht oder gibt es noch eine andere als java.sun.com/j2se/1.4.2/docs/api/ ?


    Die Zeile für den Benutzernamen muss aber

    Quellcode

    1. String home = System.getProperty("user.home");

    heißen, bei Properties meint er ein Objekt gefunden zu haben will aber einen String haben.

    Jedenfalls funktioniert es jetzt :)
  • Quellcode

    1. String home = System.getProperty("user.home");
    funktioniert natürlich auch. Hatte ich auf die Schnelle übersehen. :(

    Der Benutzername ist unter dem Key "user.name" abgestellt. Wenn Dein Progi auch unter Windows funktionieren soll, solltest Du aber das User-Home-Verzeichnis verwendet, da dieses unter Win2000 z.B. auf "C:\Dokumente und Einstellungen\username" steht. Ja ja, jetzt nicht schlagen, wenn ich an Win2000 Systemen arbeiten muss. Finde ich ja auch nicht so toll. X(
  • @MetalSnake: Klar, die API kann man erst verstehen, wenn man OOP komplett verstanden hat. API lese ich jeden Tag und es liefert mir die wichtigsten Informationen über Objekte. Ohne API ist die Java Programmierung unvorstellbar ;)

    Viel Spass weiterhin!!!
    Aus macfreakz wurde Apfelbeisser …
  • Wie bekomme ich denn den Inhalt eines Ordner raus? Also ich möchte nicht eine Datei angeben die er öffnen soll sondern einen Ordner in dem mehrere Dateien sind die geöffnet werden sollen angeben.
    Habe in der Doku schon nach Folder und Directory durchsucht aber nichts brauchbares gefunden :/ Gibts vielleicht noch ein Buch wo beschrieben steht wie man was in der Doku findet? ;)
  • Hallo nochmal,

    wie erstellt man denn Ordner? Hab in Javabuch.de in meinem Schulbuch und in der API nichts dazu gefunden :(


    Ich hoffe es wird euch nicht zu blöd meine albernen Fragen zu beantworten ;) Aber ich bin schon fast fertig mit meinem ersten braubaren Programm.

    Ich muss jetzt nur noch wissen wie ich Ordner erstelle und dann noch einen blöden bug beheben den ich aber noch finden werde hoffe ich.
  • Original von snowman
    Du legst eine neue Instanz von java.io.File (String path) an und erstellst mit mkdir/mkdirs der/die/das Verzeichniss(e).



    Danke, werds probieren

    Original von snowman
    Schon mal überlegt, selbst die Dokumentation zu lesen?



    Original von MetalSnake
    Hab in Javabuch.de in meinem Schulbuch und in der API nichts dazu gefunden
  • Java Almanach

    Sehr schöne Beispiele für solch gängigen Probleme stehen im Java Almanach (javaalmanac.com/).

    Es ist in Englisch geschrieben, aber aus meiner Sicht sehr leicht verständlich.

    Den Beispielkode (examplets) kann man kostenlos in einem PDF (ältere Version des Almanach! :() runterladen.
    (java.sun.com/developer/codesamples/examplets/)

    Ansonsten kann man unter der erst genannten URL auch zu Java Packages nachschlagen oder nach Stichworten suchen, z.B.:

    javaalmanac.com/egs/java.io/CreateDir.html

    e29. Creating a Directory

    // Create a directory; all ancestor directories must exist
    boolean success = (new File("directoryName")).mkdir();
    if (!success) {
    // Directory creation failed
    }

    // Create a directory; all non-existent ancestor directories are
    // automatically created
    success = (new File("directoryName")).mkdirs();
    if (!success) {
    // Directory creation failed
    }


    8)
  • RE: Java Almanach

    Original von crispan
    Sehr schöne Beispiele für solch gängigen Probleme stehen im Java Almanach (javaalmanac.com/).

    Es ist in Englisch geschrieben, aber aus meiner Sicht sehr leicht verständlich.


    Ui, danke! :)

    So wie ich das auf den ersten Blick sehe gibts da sogar Beispiele zur GUI Programmierung :) Versuche das grad zu lernen, aber ist gar nicht so einfach :(