Introdução
Muitas aplicações lidar com arquivos de alguma forma e arquivo de manipulação é um dos princípios básicos Conhecimento em qualquer linguagem de programação.
Manipular arquivos, precisamos saber onde eles estão localizados. Ter uma descrição geral dos arquivos em um diretório é primordial se quisermos conseguir isso, especialmente se pudermos realizar operações nelas por meio de iteração. Existem várias maneiras de fazer isso em Java, que mostraremos ao longo deste artigo.
Por uma questão de simplicidade, todos os exemplos serão escritos para a próxima árvore de arquivos:
file.list ()
o método mais simples de nomes de arquivos de lista e pastas em um determinado diretório, sem passar pelos subdiretórios, é o método auxiliar. .list()
, que retorna uma matriz de String
s.
Nós fazemos isso usando o .list()
método em um 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); } }}
Usando um simples para-Cada ciclo , molhe através da matriz e imprimir o String
s.
CodingMusicminimax.csuper_hack.pyTODO.txt
com esta abordagem, todos os elementos do CodingMusic
Directory não são exibidos, e uma desvantagem dessa abordagem é que não podemos realmente fazer alguma coisa com o próprio arquivos. Só estamos obtendo seus nomes. É útil quando só queremos dar uma olhada nos arquivos na parte inferior da letra.
filenamfilter
Outra coisa que podemos fazer com o .list()
O método é criar um FilenameFilter
para retornar apenas os arquivos 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 isso produziria:
file.listfiles ()
Semelhante ao método anterior, isso pode ser usado aos nomes de retorno de arquivos e diretórios, mas desta vez nós obtê-los como uma matriz de File
objetos, que nos dá a possibilidade de manipulá-los diretamente:
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()); } }}
Output:
minimax.c
Agora, vamos percorrer o sistema de arquivos usando a recursão e mais alguns métodos para usar no File
objeto:
Output:
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 ()
em Java 8 e Presentio res usamos o java.nio.file.Files
classe para preencher um Stream
e usá-lo para arquivos de viagem e diretórios, ao mesmo tempo, através de recursivamente Os subdiretórios .
Por favor, note que, neste exemplo, usaremos expressões 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(); } }}
aqui, nós preenchemos um Stream
Usando o método , passando um argumento Paths
O Paths
A classe consiste em métodos estáticos que retornam um Path
com base em um URI da cadeia e usando um Path
, podemos localizar o arquivo facilmente.
o Path
, Paths
,
, e muitas outras classes pertencem ao java.nio
pacote, que foi introduzido em Java 7 como uma maneira mais moderna para representar arquivos sem bloqueio.
em seguida, usando a moldura coleção, uma lista é gerada
Executar este fragmento de código irá produzir:.
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
Conclusão
Gerenciamento de arquivos de alguma forma é uma tarefa central para a maioria dos idiomas de programação, e isso inclui a capacidade de listar e encontrar arquivos no sistema de arquivos. Para manipular arquivos, precisamos saber onde eles estão localizados. Ter uma descrição geral dos arquivos em um diretório é fundamental se quisermos conseguir isso, especialmente se pudermos realizar operações neles por meio de iteração.
Neste artigo, mostramos várias maneiras diferentes no Java para listar arquivos no sistema de arquivos, usando tanto abordagens recursiva linear e.