Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 25
  1. #11
    ah ok il problema quindi è che mi serve un'altra stringa da concatenare alla prima giusto?
    codice:
        public static String scansionaDirectory(File dir) throws IOException {
            String result = "";
            String result2 = "";
            File[] elementi = dir.listFiles();
            File file = null;
            if (elementi == null) {
                throw new IOException("Errore lista entry per " + dir);
            }
            for (int i = 0; i < elementi.length; i++) {
                file = elementi[i];
                if (file.isDirectory()) {
                    scansionaDirectory(file);
                    elementi = file.listFiles();
                    for (int j = 0; j < elementi.length; j++) {
                        file = elementi[j];
                        result2 += file + "\n";
                    }
                } else {
                    result += dir + "\n" + file + "\n";
                }
            }
            return result + result2;
        }
    }
    se il problema era solo quello adesso ne ho un altro: nn entra più nell'else ma stampa solo result2.
    oppure è sbagliata la ricorsione?

  2. #12
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fermat
    ah ok il problema quindi è che mi serve un'altra stringa da concatenare alla prima giusto?
    NO

    Lo ripeto (ancora per l'ennesima volta, scusa eh, ma è così): una invocazione "innestata" ("ricorsiva" visto che il metodo è sé stesso) di scansionaDirectory ti fornisce una stringa con un "sotto-ramo" del file-system.
    Tu devi prendere questa stringa e aggiungerla a quella che hai già composto in quel livello di invocazione.

    Ripeto l'esempio (supponiamo per semplificare senza mettere il path delle directory e usando \n come separatore):

    codice:
    E:\a
        uno.txt
        due.txt
        mydir1
            tre.txt
            quattro.txt
            mydir2
                cinque.txt
    La prima invocazione di scansionaDirectory arriva a comporre "E:\a\uno.txt\nE:\a\due.txt\n" poi trova la directory "mydir1" e invoca ricorsivamente scansionaDirectory.

    A questo sotto-livello il metodo compone "E:\a\mydir1\tre.txt\nE:\a\mydir1\quattro.txt\ n" e poi trova "mydir2" e invoca ricorsivamente scansionaDirectory.

    A questo ulteriore sotto-livello il metodo compone solo "E:\a\mydir1\mydir2\cinque.txt\n" e lo restituisce.

    Al livello superiore si ha "E:\a\mydir1\tre.txt\nE:\a\mydir1\quattro.txt\ n" e "E:\a\mydir1\mydir2\cinque.txt\n" restituito dalla ricorsione. Cosa fai? Li concateni

    "E:\a\mydir1\tre.txt\nE:\a\mydir1\quattro.txt\nE:\ a\mydir1\mydir2\cinque.txt\n"

    e restituisci il tutto a sua volta.

    Al livello superiore (quello iniziale) hai "E:\a\uno.txt\nE:\a\due.txt\n" e "E:\a\mydir1\tre.txt\nE:\a\mydir1\quattro.txt\nE:\ a\mydir1\mydir2\cinque.txt\n" (restituito dalla ricorsione). Cosa fai? Di nuovo li concateni

    Ed ottieni:

    "E:\a\uno.txt\nE:\a\due.txt\nE:\a\mydir1\tre.txt\nE :\a\mydir1\quattro.txt\nE:\a\mydir1\mydir2\cinque. txt\n"

    Con tutti i file nella struttura.
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #13
    codice:
        public static String scansionaDirectory(File dir) throws FileNotFoundException {
            File[] elementi = dir.listFiles();
            File file = null;
            String result = "";
            for (int i = 0; i < elementi.length; i++) {
                file = elementi[i];
                if (file.isDirectory()) {
                    String otherDir = scansionaDirectory(file);
                    result += otherDir;
                }
                System.out.println(dir + "\\" + file.getName());
                result += dir + "\\" + file.getName() + "\n";
            }
            return result;
        }
    cioè bastava modificare così??

  4. #14
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fermat
    codice:
                    String otherDir = scansionaDirectory(file);
                    result += otherDir;
    cioè bastava modificare così??
    Sostanzialmente .... sì.
    Ora quindi hai compreso? Spero.

    Originariamente inviato da fermat
    codice:
    System.out.println(dir + "\\" + file.getName());
    result += dir + "\\" + file.getName() + "\n";
    Piccolo appunto: hai oggetti java.io.File. Puoi ottenere il path assoluto (o quello "canonico") banalmente con getAbsolutePath() o getCanonicalPath().

    Senza dover quindi andare a fare tu composizioni strane usando "\\" (il separatore è system-dependent!) che sarebbero in generale da evitare.
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #15
    si ho visto.
    così è sicuramente molto meglio.
    grazie per la pazienza!!!

  6. #16
    giusto per la cronaca, seguendo una guida ho creato un altro modo:
    codice:
    import java.io.*;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.List;
    
    public class ListDir {
    
        public static void main(String args[]) throws FileNotFoundException {
            File dir = new File("E:\\A");
            List<File> lista = ListDir.sortList(dir);
            for (File files : lista) {
                System.out.println(files);
            }
        }
    
        public static List<File> listingDir(File dir) {
            List<File> file = new ArrayList<File>();
            File[] elementi = dir.listFiles();
            List<File> fileDir = Arrays.asList(elementi);
            for (File files : fileDir) {
                file.add(files);
                if (files.isDirectory()) {
                    List<File> otherDir = listingDir(files);
                    file.addAll(otherDir);
                }
            }
            return file;
        }
    
        private static List<File> sortList(File dir) throws FileNotFoundException {
            validateDir(dir);
            List<File> file = listingDir(dir);
            Collections.sort(file);
            return file;
        }
    
        private static void validateDir(File dir) throws FileNotFoundException {
            if (dir == null) {
                throw new IllegalArgumentException("Directory should not be null.");
            }
            if (!dir.exists()) {
                throw new FileNotFoundException("Directory does not exist: " + dir);
            }
            if (!dir.isDirectory()) {
                throw new IllegalArgumentException("Is not a directory: " + dir);
            }
            if (!dir.canRead()) {
                throw new IllegalArgumentException("Directory cannot be read: " + dir);
            }
        }
    }
    mi pare migliore e anche scritto meglio.
    ciauz!

  7. #17
    no più che altro a questo punto mi chiedo: se ho un metodo di tipo List<File> come faccio a popolare una textarea?
    perchè ovviamente questo mi da errore di incompatibilità tra un JComponente e List<File>.

  8. #18
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fermat
    giusto per la cronaca, seguendo una guida ho creato un altro modo:
    Certo, perfettamente possibile. Non ho analizzato tutto per bene ma si vede chiaramente che l'elenco è fatto con List<File>, una collezione lista di oggetti File.

    Nota che:

    List<File> fileDir = Arrays.asList(elementi);

    è del tutto inutile. Avendo un File[] si può benissimo usare il ciclo "for-each" per iterare sull'array (chi l'ha scritto dubito conosca bene il for-each ...).

    Originariamente inviato da fermat
    no più che altro a questo punto mi chiedo: se ho un metodo di tipo List<File> come faccio a popolare una textarea?
    Ovviamente direttamente no.
    Fai tu una iterazione sulla lista e componi tutta una stringa aggiungendo anche dietro ad ogni nome il separatore che vuoi (es. newline).
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  9. #19
    il metodo che richiamo nel frame per riempire la textarea però è questo:
    codice:
        public static List<File> sortList(File dir) throws FileNotFoundException {
            validateDir(dir);
            List<File> file = listingDir(dir);
            Collections.sort(file);
            return file;
        }
    è qua che devo creare la stringa giusto??

  10. #20
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fermat
    il metodo che richiamo nel frame per riempire la textarea però è questo:
    codice:
        public static List<File> sortList(File dir) throws FileNotFoundException {
            validateDir(dir);
            List<File> file = listingDir(dir);
            Collections.sort(file);
            return file;
        }
    è qua che devo creare la stringa giusto??
    Concettualmente tra dopo l'ordinamento (ovviamente) e prima di popolare la textarea. Poi dove lo fai fisicamente .... beh, cambia relativamente poco.

    Quindi se vuoi cambiare il tipo di ritorno di sortList e far ritornare String e all'interno fai la concatenazione ... ok.
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.