Introducere
Multe aplicații Manipulați fișierele într-un fel și manipularea fișierelor este una dintre elementele de bază Cunoștințe în orice limbă de programare.
Pentru a manipula fișiere, trebuie să știm unde se află. Având o descriere generală a fișierelor dintr-un director este paramount dacă vrem să realizăm acest lucru, mai ales dacă putem efectua operațiuni prin intermediul iterației. Există mai multe modalități de a face acest lucru în Java, pe care îl vom arăta pe parcursul acestui articol.
Din motive de simplitate, toate exemplele vor fi scrise pentru următorul arbore de fișier:
FILE.LIST ()
Cea mai simplă metodă de listare a numelor și folderelor de fișiere într-un director dat, fără a trece prin subdirectoare, este metoda auxiliară. .list()
, care returnează o matrice de String
s.
Facem acest lucru folosind .list()
într-un
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); } }}
Folosind o simplă pentru fiecare buclă , umed prin matrice și tipăriți String
s.
CodingMusicminimax.csuper_hack.pyTODO.txt
cu această abordare, toate elementele CodingMusic
Nu sunt afișate și un dezavantaj al acestei abordări este că nu putem face nimic cu fișierele în sine. Obținem doar numele lor. Este util atunci când dorim doar să aruncăm o privire la fișierele din partea de jos a literei.
Filenamfilter
un alt lucru pe care îl putem face cu .list()
Metoda este de a crea un FilenameFilter
pentru a returna numai fișierele pe care le dorim:
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);
Rulați acest fragment de cod pe care l-ar produce:
file.listfiles ()
Similar cu metoda anterioară, acest lucru poate fi utilizat Pentru a returna numele de fișiere și directoare, dar de data aceasta le obținem ca o matrice de obiecte File
, ceea ce ne dă posibilitatea de a le manipula direct:
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()); } }}
ieșire:
minimax.c
Acum, să trecem prin sistemul de fișiere folosind recursiunea și mai multe metode de utilizare în File
Obiect:
ieșire:
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)
fișiere.walk ()
în Java 8 și prezentare Res Folosim clasa java.nio.file.Files
pentru a popula un Stream
și utilizați-l pentru a călători fișiere și directoare, în același timp, prin recursiv subdirectoarele .
Vă rugăm să rețineți că în acest exemplu vom folosi expresii 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(); } }}
aici, am populat un Stream
Folosind metoda , trecând un argument Paths
. Clasa Paths
Clasa este alcătuită din metode statice care returnează un Path
bazat pe un lanț URI și folosind un Path
, putem localiza cu ușurință fișierul.
Path
, Paths
, Files
și multe alte clase aparțin pachetului java.nio
, care a fost introdus în Java 7 ca mod mai modern de a reprezenta fișiere fără blocare. /p>
Apoi, folosind cadrul de colectare, se generează o listă.
Rulați acest fragment de cod va produce:
D:ProgrammingCoding MusicRadiohead - Everything in Its Right Place.mp3D:ProgrammingCoding MusicLim Taylor - Isn't It Wonderful.mp3D:ProgrammingCoding MusicCelldweller - Frozen.mp3D:ProgrammingCoding MusicGirl Talk - All Day.mp3D:Programmingminimax.cD:Programmingsuper_hack.pyD:ProgrammingTODO.txt
Concluzie
Gestionarea fișierelor este o sarcină centrală pentru majoritatea limbilor de programare, iar aceasta include abilitatea de a lista și a găsi fișiere în sistemul de fișiere. Pentru a manipula fișiere, trebuie să știm unde se află. Având o descriere generală a fișierelor dintr-un director este Paramount dacă vrem să realizăm acest lucru, mai ales dacă putem efectua operațiuni prin intermediul iterației.
În acest articol arată mai multe moduri diferite în Java pentru a lista arhivele În sistemul de fișiere, folosind ambele abordări liniare și recursive.
2d831a01ed „>
rata in acest post