Introduci贸n
Moitas aplicaci贸ns manipular ficheiros de algunha maneira e manipulaci贸n de ficheiros 茅 un dos b谩sicos Co帽ecemento en calquera linguaxe de programaci贸n.
Para manipular ficheiros, necesitamos saber onde est谩n localizados. Ter unha descrici贸n xeral dos ficheiros dun directorio 茅 primordial se queremos lograr isto, especialmente se podemos realizar operaci贸ns nelas a trav茅s de iteraci贸n. Hai varias formas de facelo en Java, que mostraremos ao longo deste artigo.
Por mor da sinxeleza, todos os exemplos escribiranse para a seguinte 谩rbore de ficheiros:
FILE.LIST ()
O m茅todo m谩is sinxelo para listar nomes e cartafoles do ficheiro nun directorio dado, sen pasar por subdirectorios, 茅 o m茅todo auxiliar. .list()
, que devolve unha matriz de String
s.
Facemos isto usando o nun File
Exemplo:
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); } }}
Usar un simple para cada loop , mollado a trav茅s da matriz e imprimir o String
s.
CodingMusicminimax.csuper_hack.pyTODO.txt
Con este enfoque, todos os elementos do non se amosan, e unha desvantaxe deste enfoque 茅 que realmente non podemos facer nada cos ficheiros en si. Estamos a obter os seus nomes. 脡 煤til cando s贸 queremos botar unha ollada aos ficheiros na parte inferior da letra.
filenamfilter
Outra cousa que podemos facer co .list()
O m茅todo 茅 crear un FilenameFilter
para devolver s贸 os ficheiros que queremos:
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);
Executar este fragmento de c贸digo que producir铆a:
file.listFiles ()
Similar ao m茅todo anterior, pode usarse isto Para devolver os nomes e os directorios do ficheiro, pero esta vez obtelos como unha matriz de obxectos
, que nos proporcionan a posibilidade de manipulaci贸n directa:
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()); } }}
sa铆da:
minimax.c
Agora, imos pasar polo sistema de ficheiros usando a recursi贸n e alg煤ns m茅todos m谩is para usar no File
Obxecto:
sa铆da:
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)
ficheiros.walk ()
en Java 8 e presentio Res N贸s usamos a clase
para poboar un Stream
e usalo para viaxar arquivos e directorios, ao mesmo tempo, a trav茅s de recursivamente os subdirectorios .
Por favor, te帽a en conta que neste exemplo imos usar expresi贸ns 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(); } }}
Aqu铆, temos unha poboaci贸n Stream
usando o m茅todo , pasando a Paths
argumento. O Paths
a clase consta de m茅todos est谩ticos que devolven a Path
baseado nunha cadea URI e usando un Path
, podemos localizar facilmente o ficheiro.
Path
, Paths
, Files
e moitas outras clases pertencen ao paquete
, que foi introducido en Java 7 como unha forma m谩is moderna de representar ficheiros sen bloquear.
Ent贸n, usando o marco de recollida, x茅rase unha lista.
Executar Este fragmento de c贸digo producir谩:
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
Conclusi贸n
Xesti贸n de ficheiros de algunha maneira 茅 unha tarefa central para a maior铆a dos idiomas de programaci贸n e incl煤e a capacidade de listar e atopar ficheiros no sistema de ficheiros. Para manipular ficheiros, necesitamos saber onde est谩n localizados. Ter unha descrici贸n xeral dos ficheiros dun directorio 茅 primordial se queremos lograr isto, especialmente se podemos realizar operaci贸ns sobre eles a trav茅s de iteraci贸n.
Neste artigo mostramos varias formas diferentes en Java para listar arquivos No sistema de ficheiros, utilizando enfoques lineais e recursivos.