rekursywne szukanie pliku

0
private void recursiveFileSearch(String path, String filename) {
        List<String> results = new ArrayList<>();
        File file = new File(path);
        try (Scanner scanner = new Scanner(new File(filename))) {
            if (file.exists() && file.isDirectory()) {
                List<File> fileList = Arrays.asList(file.listFiles());
                for (File f : fileList) {
                    if (f.getName().startsWith(filename)) {
                        results.add(f.getAbsolutePath());
                    } else if (f.isDirectory()) {
                        recursiveFileSearch(f.getAbsolutePath(), filename);
                    }
                }
            }
            System.out.println(results.toString()   );
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (NullPointerException ne) {
            ne.printStackTrace();
        }
    }

czemu to wypisuje tylko erwszy napotkany plik a nie ich liste ? ( szukam np. .gitignore a mam ich kilkadziesiat - znajduje tylko ten z projektu w ktorym teraz pisze )

0

Znajduje ładnie wszystkie. Ale do results wpisuje tylko te pliki, które są znalezione w danym katalogu/ na danym poziomie wywołania rekurencyjnego.
Bo zaczynasz od:

   List<String> results = new ArrayList<>();

Za każdym razem jak wejdziesz w funkcje to results jest lokalnie inicjowane, dodawane są do tej listy znaleznione pliki... a potem wynik (zmieniona lista) jest zwyczajnie porzucany.

0

Przekazuj results, jako parameter, na koncu rekurencji go Zwroc.

0

hehe wciaz nie dziala, globalnie zainicjowalem liste

    private static final List<String> results = new ArrayList<>();

I jej uzywalem w metodzie - nic, zwraca tylko jedno,
inicjuje ja na poczatku metody i na koncu 'results .toString();' tez zwraca tylko 1 elementowa tablice :f

private static final List<String> results = new ArrayList<>();
    public static void main(String[] args) {
        System.out.println(recursiveFileSearch(results,"c:",".gitignore"));
    }

    private static List<String> recursiveFileSearch(List<String> results, String path, String filename) {
        File file = new File(path);

        if (file.exists() && file.isDirectory() && file.canRead()) {
            List<File> fileList = Arrays.asList(file.listFiles());
            for (File f : fileList) {
                if (f.getName().startsWith(filename)) {
                    results.add(f.getAbsolutePath());
                }else  if (f.isDirectory()) {
                    recursiveFileSearch(results,f.getAbsolutePath(), filename);
                }
            }
        }
        return results;
    }
0

hmm odkrylem ze dziala jak dam dokladna sciezke
np:```
recursiveFileSearch("C:/x/xx/yyy","README.md")

zwrocilo liste kilkunastu plikow
a jak dawalem samo

recursiveFileSearch("C:","README.md")

to zwracalo tylko z pliku w ktorym teraz jestem?? pomysly czemu tak?
z jakiegos powodu metoda zchodzi tylko 1-2pliki w glab, przy wiecej wyrzuca sie NullPointer

1 użytkowników online, w tym zalogowanych: 0, gości: 1