Zum Inhalt springen

kann man in einer methode prüfen ob sie rekursiv aufgerufen wurde?


Empfohlene Beiträge

Geschrieben

Hallöchen,

habe ein problem is zwar nur kosmetik(oder saubererer programmaufbau) aber kann ja sein dass da jemand ne antwort hat...

ich hab ne methode die rekursiv ordner durchsucht(mit unterverzeichnissen), allerdings soll sie nur dann eine log datei erstellen wenn sie nicht rekursiv aufgerufen wurde (also nur 1mal und nicht wenn die methode in unterverzeichnissen unterwegs ist) habe das momentan mit einem boolschen parameter gelöst den ich beim normalen aufruf auf false setze und beim rekursiven eben auf true und prüfe dann in der methode auf diesen parameter

if (!recursive) {

    ...

    //log datei erstellen

    ...

}

jetzt die frage da das ja ne sehr unschöne lösung ist vor allem wenn die methode noch jemand anders nutzen will usw...

kann man überprüfen (ausser mit der selbst erstellten variable) ob die methode rekursiv aufgerufen wurde?

schonmal vielen dank für eure antworten :butler

mfg

Geschrieben

naja ich suche in der methode nach dateien also z.b. *.xml unterordner werden je nach aufruf rekursiv durchsucht

die methode schreibt in die log datei alle gefundenen dateien mit name pfad änderungsdatum usw und hängt diese log datei, sowie alle gefundenen dateienan an einen file vector an

in einer andern methode zippe ich dann alle gefundenen dateien + die log datei

Geschrieben
naja dadurch würde ich nur noch mehr unnötigen code erzeugen meiner meinung nach :(

Das ist ja egal ... die 5 Zeilen .. :floet:

Aber es erhöht die Verständlichkeit/Lesbarkeit des Codes, wenn nicht soviele

bedingte Verzweigungen drinn sind

Geschrieben

ok anscheinend hab ich deinen post nicht so ganz verstanden :floet:

hier mal meine methode:

public static ArrayList<File> search(String workpath, String filter, boolean sub, boolean recursive) throws Exception {

        // einen angegebenen Ordner nach einem Suchbegriff (mit regulären Ausdrücken) durchsuchen

        // je nach Aufruf, Unterordner durchsuchen


        String path;

        String parentPath;

        int nameOffset;

        String filename;


        // Pfad des Ordners für Log Dateien abrufen

        path = ConfigurationCommonHelper.getApplicationServerPhysicalPath();  //gibt den pfysikalischen Pfad des Programms aus

        path = path.replaceAll("webapp/", "logs/");


        // wenn der Ordner für die Log Dateien nicht vorhanden ist wird dieser erstellt

        File dest = new File(path);

        if (!dest.exists()) {

            dest.mkdir();

        }


        File dir = new File(workpath);          //"Zeiger" auf das Arbeitsverzeichnis setzen


        // Dateinamen ändern damit \ und / als - angezeigt werden, ".../Programmname/" nicht in den Dateinamen übernehmen

        // und den Filter anhängen. Wurde nach .* gesucht wird dieser Ausdruck durch # ersetzt da * in Windows als Teil eines

        // Dateinamens nicht zulässig ist

        parentPath = dir.getParent();

        nameOffset = parentPath.lastIndexOf("Programmname") + 5;

        filename = dir.toString().substring(nameOffset);

        filename = filename.replaceAll("\\\\", "-");

        filename = filename.replaceAll("/", "-");

        filename = filename + filter.replaceAll("\\.\\*", "#");

        logger.debug("FileSearch.search: filename=" + filename);


        ArrayList<File> toReturn = new ArrayList<File>();


        try {

            FileWriter writer;

            String log;

            Date d;

            String date;

            String time;


            File[] files = dir.listFiles();         //Inhalt des Verzeichnisses in ein FileArray schreiben



            for (int i = 0; i < files.length; i++) {                             //Inhalt des FileArrays durchlaufen

                if (files[i].isFile() && files[i].getName().matches(filter)) {  //wenn das File Element eine Datei ist UND der Vergleich mit dem regulären Ausdruck true ergibt

                    toReturn.add(files[i]);                              //File Element an die File ArrayList anhängen

                } else {

                    if (sub && files[i].isDirectory()) {                        // wenn Unterverzeichnisse durchsucht werden sollen und das File Element ein Verzeichnis ist

                        toReturn.addAll(search(files[i].toString(), filter, sub, true));       // Methode rekursiv aufrufen um das Unterverzeichnis zu durchsuchen

                    }

                }

            }


            // wurde die Methode nicht rekursiv aufgerufen wird die Log Datei erstellt in der benötigte

            // Informationen wie Änderungsdatum, Pfad und Größe gespeichert werden

            if (!recursive) {

                File logFile = new File(path + filename + ".txt");


                writer = new FileWriter(logFile.toString());  //LogDatei erstellen

                log = "Gesuchte Dateien: " + filter + "\r\nin Ordner: \t" + workpath + "\r\n\r\nSuchergebnisse:\r\n\r\n";

                writer.write(log);


                for (int i = 0; i < toReturn.size(); i++) {

                    d = new Date(toReturn.get(i).lastModified());

                    date = DateFormat.getDateInstance().format(d);

                    time = DateFormat.getTimeInstance().format(d);


                    log = "Name: " + toReturn.get(i).getName() + "\r\n";

                    log = log + "Pfad: " + toReturn.get(i).getAbsolutePath() + "\r\n";

                    log = log + "Änderungsdatum: " + date + " " + time + "\r\n";

                    log = log + "Größe: " + toReturn.get(i).length() + " Byte" + "\r\n\r\n";

                    writer.write(log);

                }

                log = "\r\n" + toReturn.size() + " Dateien gefunden!\r\n";

                writer.write(log);

                writer.close();

                toReturn.add(logFile);

            }


        } catch (Exception e) {

            try {

                FileWriter errorlog = new FileWriter(path + "SearchError.txt");

                errorlog.write("Fehler:\r\n" + e.toString() + "\r\naufgetreten!");

                errorlog.close();

            } catch (Exception e1) {

                throw e1;

            }



        }


        return toReturn;

    }

wie würdest du deinen Ansatz da jetzt einbauen? habe das so verstanden dass du ne zweite methode für die unterverzeichnisse schreiben willst :eek

kleiner hinweis...programmiere erst 2 monate in java...davor nur c++ und ein bisschen html und php

also verurteilt mich nicht falls ich da nen fauxpas in java drin habe ;)

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...