Ei, bem-vindo de volta. Scott Stanlick, aqui. Vamos dar uma olhada em file.io neste módulo. Estas lições cobrirão a velha maneira de fazer as coisas, a nova maneira de fazer as coisas. Vamos dar uma olhada na criação e manipulação de armazenamento temporário, e demonstraremos como escrever um localizador de arquivos usando técnicas de busca em profundidade. Nesta primeira lição, vamos comparar e contrastar a forma como as coisas sempre foram para a forma como as coisas estão agora com IO. Então, se você observar aqui, algumas coisas que eu só quero mencionar. IO existe desde o Java 1.0, e não era a maior biblioteca de IO. Teve alguns problemas. E esses problemas já foram resolvidos. Estou usando algo chamado java.nio, ou o novo IO. Desde o Java 7, você pode escolher entre qualquer um deles. No NIO, esta nova biblioteca traz a mesma funcionalidade que tivemos com java.io, mas com grandes melhorias. E também há uma maneira fácil de migrar sem esforço entre os dois. O legado java.io não é recomendado para novos desenvolvimentos, mas não há planos para depreciá-lo. não vai a lugar nenhum porque é usado em todo o lugar. Vamos dar uma olhada em alguns tipos aqui, um chamado java.nio.file.Path, que fará tudo o que o arquivo fez, e geralmente de uma maneira melhor. Então vamos pular aqui. Antigamente, se quiséssemos criar um arquivo, diríamos novo arquivo. E então poderíamos virar e deletar o arquivo com arquivo.delete. E talvez tenha funcionado, talvez não, mas o feedback foi medíocre, com certeza. Houve tratamento de erros ruim, poucas exceções. O resultado pode ser que não existe. Você não tem permissões. Havia muitas deficiências com essa API. A nova maneira de fazer isso é dizer Path.of Foo.java. E se você tentar usar o método delete na classe Files e passe este caminho, e o arquivo não existe, você vai ter uma exceção muito legal. Como por exemplo, pode lançar um NoSuchFileException se não existe. Mas há muitas outras exceções que esse cara pode apresentar a você que explicam muito bem por que pode não ter funcionado. O suporte entre o novo IO e o legado é, como mencionei anteriormente, é fácil. Então, o velho mundo era que eu queria criar um novo arquivo. Você pode passar as partes, a pasta /java, o arquivo Foo.java. A mesma coisa acontece com Paths.get. Paths é a nova maneira de fazer isso. Se você quiser alternar entre o antigo e o novo, o arquivo tem um toPath, que é a maneira de fazer o velho parecer novo. E o novo tem um toFile, que é uma maneira de fazer o novo parecer velho. E assim, dependendo do seu contexto, você pode precisar usar uma técnica ou outra, mas você tem os dois disponíveis a qualquer momento. Havia uma maneira de obter metadados de um arquivo. Então isso não mudou muito. É apenas um pouco diferente na maneira como você vai usá-lo. Então, diremos Arquivo, este é o velho mundo, e diremos Path, esse é o novo mundo. E assim temos um arquivo e um caminho, e o java.io ficou assim. Estes foram os métodos envolvidos na obtenção de metadados sobre um arquivo. Está em um diretório? Posso ler, escrever? É executável, está oculto? Todas essas ideias. E usando a nova API, usamos a classe Files. A classe Files tem muitos métodos nela, que usamos quando passamos o caminho para esses métodos, e nos dirá basicamente as mesmas coisas. Mas estes, eles são muito mais robustos na forma como foram concebidos. É mais recente e aprendemos nossas lições. Então era assim que poderíamos ter trabalhado com um arquivo usando java.io, então um novo arquivo. E eu vou colocar aqui em src/test/java/com/acme/io. Devo ter uma pasta em algum lugar aqui assim. Sim, com.acme.io. Posso pedir um nome de arquivo canônico. Posso perguntar se existe ou não. E então, da mesma forma, também posso convertê-lo para o novo mundo e validá-lo novamente. Então aqui vamos nós, Files.exist, file.toPath. Então agora eu pego o antigo e o transformo em um caminho. E isso é muito parecido. Estou criando o mesmo arquivo, e vou pedir seu caminho absoluto e se existe ou não. E da mesma forma, posso converter do novo mundo de volta para um arquivo, para que eu possa convertê-lo em legado e faça a mesma validação novamente. No espaço java.io, o legado, havia um método chamado listFiles. Se você quiser obter um diretório de todos os arquivos em um diretório, você diria listFiles, e retornaria um array, um tipo de arquivo. O novo mundo é um pouco diferente. Você diz Files.newDirectoryStream, e já examinamos java.util.streams com os filtros e mapas e traduções e todas essas coisas boas. Files.newDirectoryStream segue seu caminho para a origem e retorna um fluxo de diretório chamado paths aqui. E neste caso, podemos dizer para cada elemento no stream, vamos imprimir. Portanto, esta é apenas a nova maneira de listar os arquivos que existem em um diretório. Eu aprecio você assistindo.