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.
Vota questo post