Directory Java: Elenco file in una directory

Introduzione

Molte applicazioni Maniglia i file in qualche modo e la manipolazione dei file è uno dei fondamentali Conoscenza in qualsiasi linguaggio programmazione.

Per manipolare i file, dobbiamo sapere dove si trovano. Avere una descrizione generale dei file in una directory è fondamentale se vogliamo raggiungere questo obiettivo, specialmente se possiamo eseguire operazioni in esse attraverso iterazione. Ci sono diversi modi per farlo a Java, che mostreremo in tutto questo articolo.

Per motivi di semplicità, tutti gli esempi saranno scritti per l’albero dei file successivo:

Programming|-- minimax.c|-- super_hack.py|-- TODO.txt`-- CodingMusic |-- Girl Talk - All Day.mp3 |-- Celldweller - Frozen.mp3 |-- Lim Taylor - Isn't It Wonderful.mp3 `-- Radiohead - Everything in Its Right Place.mp3

File.List ()

Il metodo più semplice per elencare i nomi dei file e le cartelle in una determinata directory, senza passare attraverso le sottodirectory, è il metodo ausiliario. .list(), che restituisce una matrice di String S.

Lo facciamo usando il .list() Metodo in File Esempio:

public class Pathnames { public static void main(String args) { // Creates an array in which we will store the names of files and directories String pathnames; // Creates a new File instance by converting the given pathname string // into an abstract pathname File f = new File("D:/Programming"); // Populates the array with names of files and directories pathnames = f.list(); // For each pathname in the pathnames array for (String pathname : pathnames) { // Print the names of files and directories System.out.println(pathname); } }}

Utilizzando un ciclo semplice per-ogni , bagnato attraverso la matrice e stampa il String S.

CodingMusicminimax.csuper_hack.pyTODO.txt

Con questo approccio, tutti gli elementi del CodingMusic La directory non è visualizzata e uno svantaggio di questo approccio è che non possiamo davvero fare nulla con i file stesso. Stiamo solo ottenendo i loro nomi. È utile quando vogliamo solo dare un’occhiata ai file nella parte inferiore della lettera.

filenamfilter

Un’altra cosa che possiamo fare con il .list() Il metodo è quello di creare un per restituire solo i file che desideriamo:

File f = new File("D:/Programming");// This filter will only include files ending with .pyFilenameFilter filter = new FilenameFilter() { @Override public boolean accept(File f, String name) { return name.endsWith(".py"); } };// This is how to apply the filterpathnames = f.list(filter);

Esegui questo frammento di codice Produrrebbe:

file.listfiles ()

Simile al metodo precedente, questo può essere utilizzato Per restituire i nomi dei file e le directory, ma questa volta li otteniamo come una matrice di File oggetti, che ci dà la possibilità di manipolarli direttamente:

public class Pathnames { public static void main(String args) { // try-catch block to handle exceptions try { File f = new File("D:/Programming"); FilenameFilter filter = new FilenameFilter() { @Override public boolean accept(File f, String name) { // We want to find only .c files return name.endsWith(".c"); } }; // Note that this time we are using a File class as an array, // instead of String File files = f.listFiles(filter); // Get the names of the files by using the .getName() method for (int i = 0; i < files.length; i++) { System.out.println(files.getName()); } } catch (Exception e) { System.err.println(e.getMessage()); } }}

Uscita:

minimax.c

Ora, passiamo attraverso il file system utilizzando la ricorsione e alcuni metodi da utilizzare nel File Oggetto:

public class ListFilesRecursively { public void listFiles(String startDir) { File dir = new File(startDir); File files = dir.listFiles(); if (files != null && files.length > 0) { for (File file : files) { // Check if the file is a directory if (file.isDirectory()) { // We will not print the directory name, just use it as a new // starting point to list files from listDirectory(file.getAbsolutePath()); } else { // We can use .length() to get the file size System.out.println(file.getName() + " (size in bytes: " + file.length()+")"); } } } } public static void main(String args) { ListFilesRecursively test = new ListFilesRecursively(); String startDir = ("D:/Programming"); test.listFiles(startDir); }}

Uscita:

Girl Talk - All Day.mp3 (size in bytes: 8017524)Celldweller - Frozen.mp3 (size in bytes: 12651325)Lim Taylor - Isn't It Wonderful.mp3 (size in bytes: 6352489)Radiohead - Everything in Its Right Place.mp3 (size in bytes: 170876098)minimax.c (size in bytes: 20662)super_hack.py (size in bytes: 114401)TODO.txt (size in bytes: 998)

files.walk ()

in Java 8 e Presentio RES Utilizziamo java.nio.file.Files Classe per popolare un Stream e usarlo per viaggiare file e directory, allo stesso tempo, attraverso la sottodirectory .

Si prega di notare che in questo esempio useremo le espressioni Lambda:

public class FilesWalk { public static void main(String args) { try (Stream<Path> walk = Files.walk(Paths.get("D:/Programming"))) { // We want to find only regular files List<String> result = walk.filter(Files::isRegularFile) .map(x -> x.toString()).collect(Collectors.toList()); result.forEach(System.out::println); } catch (IOException e) { e.printStackTrace(); } }}

Qui, abbiamo popolato un Stream Uso del Metodo, passando a Paths Argomento. Paths La classe è costituita da metodi statici che restituiscono un Path basato su un URI della catena e usando un Path, possiamo individuare facilmente il file.

The , Paths, Files e molte altre classi appartengono al pacchetto java.nio, che è stato introdotto in Java 7 come modo più moderno per rappresentare i file senza bloccare.

Quindi, utilizzando il telaio di raccolta, viene generato un elenco.

Eseguire questo frammento di codice produrrà:

CONCLUSIONE

Gestione dei file in qualche modo è un compito centrale per la maggior parte dei linguaggi di programmazione, e questo include la possibilità di elencare e trovare file nel file system. Per manipolare i file, dobbiamo sapere dove si trovano. Avere una descrizione generale dei file in una directory è fondamentale se vogliamo raggiungere questo obiettivo, specialmente se possiamo eseguire operazioni su di essi attraverso iterazione.

In questo articolo mostriamo diversi modi in Java a elencare archivi nel file system, utilizzando sia approcci lineari che ricorsivi.

/ div>

Vota questo post

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *