Ausgabe eines Root-Verzeichnis nach Eingabe über Konsole

ninonar

Neues Mitglied
Hallo!
(Smiley bei Aufgabe)

Leider bin ich nicht besonders begabt im Programmieren mit Java und stehe vor der ersten Aufgabe eines neuen Moduls aus meinem Studium... und leider war unser Professor auch letztes Semester nicht besonders hilfsbereit und man stand ziemlich allein da mit den Aufgaben. Dieses mal habe ich jedoch keine Hilfestellung o.ä., da ich die ersten Aufgaben aus privaten Gründen vorarbeiten muss, weil ich die nächsten zwei Wochen kaum Zeit haben werde...
Wäre toll, wenn sich jemand Zeit nehmen könnte oder vielleicht irgendeinen Ansatz wüsste, die Aufgabe zu lösen.

Die Aufgabe lautet:
Gegeben ist die folgende Methode zur Darstellung einer Verzeichnisstruktur:
public void listDir(File dir) {
File[] files = dir.listFiles();
if (files != null) {
for (int i = 0; i < files.length; i++) {
System.out.print(files.getAbsolutePath());
if (files.isDirectory()) {
System.out.print(" (Ordner)\n");
listDir(files); // ruft sich selbst mit dem
// Unterverzeichnis als Parameter auf
}
else {
System.out.print(" (Datei)\n");
}
}
}
}

Der Methode wird beim Aufruf ein File-Objekt der Klasse File übergeben. Dieses kann wie folgt erstellt werden:
String rootVerzeichnis = "C://tmp/test";
File fileObjekt = new File(rootVerzeichnis);

:)Entwickeln Sie mit Eclipse eine Java Konsolapplikation, bei der der Benutzer zunächst ein Root-Verzeichnis als String über die Tastatur eingibt. Danach sollen die im Root-Verzeichnis enthaltenen Dateien und Unterverzeichnisse auf dem Bildschirm ausgegeben werden.


Etwas als einen String in die Konsole eingegeben werden soll, schaffe ich. Aber wie soll man die Eingabe so erstellen, dass Java sie als ein Verzeichnis erkennt? Und wie muss ich das dann mit der Methode oben verknüpfen?
Beziehungsweise verstehe ich hier einfach gar nichts und schaffe es nicht, die ganzen Sachen im Kopf zusammen zu kriegen geschweige denn anzuwenden. Kann mir jemand einen Denkanstoß geben, wie ich vorgehen könnte? Es wäre schon hilfreich einfach eine Struktur im Kopf zu haben, mit der man arbeiten kann...
Sitze schon seit ein paar Tagen vor Eclipse und verzweifle langsam

Vielen Dank schonmal!
LG
Nora
 
K

kneitzel

Gast
Du hast in der Methode doch schon den Typ des Parameters (File). Schau Dir doch einfach einmal die Dokumentation der Klasse an - vielleicht findest Du dann ja einen Weg, wie Du aus einem String eine neue Instanz von File bekommst.
 

sascha-sphw

Top Contributor
Du hast es doch sogar selbst im Post stehen. Und Du sagst, wie man einen String vom Nutzer einliest weißt Du. Dann musst Du das doch nur noch verbinden.
Java:
String rootVerzeichnis = "C://tmp/test";
File fileObjekt = new File(rootVerzeichnis);
 

mihe7

Top Contributor
Etwas als einen String in die Konsole eingegeben werden soll, schaffe ich. Aber wie soll man die Eingabe so erstellen, dass Java sie als ein Verzeichnis erkennt? Und wie muss ich das dann mit der Methode oben verknüpfen?
Beziehungsweise verstehe ich hier einfach gar nichts und schaffe es nicht, die ganzen Sachen im Kopf zusammen zu kriegen geschweige denn anzuwenden. Kann mir jemand einen Denkanstoß geben, wie ich vorgehen könnte? Es wäre schon hilfreich einfach eine Struktur im Kopf zu haben, mit der man arbeiten kann...
Sitze schon seit ein paar Tagen vor Eclipse und verzweifle langsam
Ei, ei, ei, da weiß man ja gar nicht, wo man anfangen soll...

Grundsätzlich kannst Du Dir mal merken:

1. Du brauchst eine Klasse
2. Zur Ausführung brauchst Du eine main-Methode (deklariert nach festen Regeln).
3. Der Code wird schrittweise ausgeführt, beginnend in der main-Methode.

Dann muss klar sein, dass die Methode listDir eine Objektmethode ist, also nur im Kontext eines Objekts ausgeführt werden kann. D. h. Du musst von der Klasse, die die Methode enthält (das kann auch Deine sein) ein Objekt erzeugen.

Naja, und der Rest steht ja eigentlich sowieso schon da.
 

123neu

Bekanntes Mitglied
Die Vorgabe ist sehr schlecht:

Java:
import java.io.File;

public class Aufgabe {
    public void listDir(File dir) {
        File[] files = dir.listFiles();
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                System.out.print(files.getAbsolutePath());
                if (files.isDirectory()) {
                    System.out.print(" (Ordner)\n");
                    listDir(files); // ruft sich selbst mit dem
                    // Unterverzeichnis als Parameter auf
                } else {
                    System.out.print(" (Datei)\n");
                }
            }
        }
    }

    public static void main(String[] args) {
        String rootVerzeichnis = "C://tmp/test";
        File fileObjekt = new File(rootVerzeichnis);
        
    }
}

Da fehlen [i]s, außerdem werden Pfade in Windows normalerweise mit Backslash ( \ ) getrennt, nicht mit zwei // ...

Jetzt zu deiner Frage. Wenn du alles schon weißt, wie man eine Zeile einlesen kann, dann sollte es ein Leichtes für dich sein, mit etwas Transferleistung eine Methode richtig aufzurufen.
 
K

kneitzel

Gast
Da die Schrift kursiv wird, gehe ich davon aus, dass die Vorgabe schon korrekt war. Auch die fehlende Einrückung deutet auf ein nachträgliches setzen der Code Tags hin ....
 

123neu

Bekanntes Mitglied
jo dann darf er auch keinen absoluten Pfad vorgeben ...

Die Vorgabe ist grottenschlecht, in der Schule noch verzeihlich, an der Uni aber nicht mehr...
 

ninonar

Neues Mitglied
Für die Vorgabe kann ich nichts :p
Also ich habe es geschafft, dass ich die Verzeichnisse aufgelistet bekomme, funktioniert also soweit. Jetzt komme ich aber wiederum an dem Punkt nicht wirklich weiter, dass ich ja das Root-Verzeichnis, was ausgelesen wird, selber eingeben soll. Das hatte vorher geklappt aber jetzt geht das nicht mehr. Hat da jemand einen Tipp? Wo genau muss ich die Methode zum abfragen der Tastureingabe ansetzten?

Java:
import java.io.File;


public class Verzeichnisstruktur {

    
    public static void listDir(File dir) {
        File[] files = dir.listFiles();
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                System.out.print(files[i].getAbsolutePath());
                if (files[i].isDirectory()) {
                    System.out.print(" (Ordner)\n");
                    listDir(files[i]); // ruft sich selbst mit dem
                    // Unterverzeichnis als Parameter auf
                }
                else {
                    System.out.print(" (Datei)\n");
                }
            }
        }
    }

    
    
    public static void main(String[] args) {

        String rootVerzeichnis = "C:...";
        File fileObjekt = new File(rootVerzeichnis);
        listDir(fileObjekt);
        
        
        
        
    }

}



Ja, und mittlerweile habe ich auch rausgefunden wie man Java-Codes hier richtig zitiert...
 

Neue Themen


Oben