Trabalhando com Filesystems

Aula
Estado
  • Existe uma versão legado da API para manipulação de arquivos java.io.File, mas é fortemente recomendada a utilização de java.nio.file (a classe File foi subdividia em três classes Path, Files e FileSystem)
    • utilizando os métodos toFile de Path e toPath de File é possível migrar entre a API antiga e a nova
  • A classe Path representa arquivos e diretórios; são objetos imutáveis
  • A classe Files possuí métodos para lidar com objetos Path
  • A classe FileSystem descreve os sistemas de arquivos disponíveis e suas propriedades:
    • acessar propriedades de arquivos
    • descobrir a raiz do sistema de arquivos
    • pegar o separador de nós do sistema (e.g. "/" ou "\")

Path

  • O método Path.of permite criar novos objetos Path
  • Podem representar um caminho absoluto ou relativo, podendo transitar entre um e outro
  • É possível criar Path's de caminhos inexistentes sem causar exceções até executar alguma ação sobre eles
  • Pode ser representado como uma sequência de elementos de um caminho
notion image
  • O método resolve gera um novo Path a partir de outro, de forma relativa
  • O método resolveSibling gera um novo Path a partir de outro, de forma relativa dentro do diretório atual
  • O método normalize retira caminhos auxiliares como . e .. (e.g. /users/joe/../pics/baby.jpg/users/joe/pics/baby.jpg)
  • O método toRealPath garante que o caminho em Path existe
  • O método relativize gera um novo Path com o caminho relativo, a partir de outro Path

Files

  • Possibilita a navegação em objetos Path
  • O método list retorna uma Stream dos Path's no caminho dado como parâmetro
  • O método walk retorna uma Stream com todos Path's no caminho dado como parâmetro entrando em cada diretório até não haver mais subdiretórios
  • O método createSymbolicLink permite a criação de um link onde um caminho leva a outro
  • O método readSymbolicLink retorna o Path referenciado por um link criado com o createSymbolicLink
  • Existem diversos outros métodos auxiliares, como isDirectory, isExecutable, isHidden, isReadable, isWritable, isRegularFile, isSymbolicLink, isSameFile(um caminho pode ser representado de forma absoluta, relativa, como um link), probeContentType, ...
  • Existem métodos para criar Path's: createDirectory, createDirectories, createFile, createTempDirectory, createTempFile
    • pode ocorrer de arquivos temporários não serem automaticamente deletados. Por isso uma boa prática é utilizar o método deleteIfExists ao iniciar o programa
  • Métodos para copiar (copy) e mover (move) arquivos também existem
  • É possível ainda ler e alterar as propriedades de um Path
notion image
  • Não é possível deletar diretórios com conteúdo; deve-se deletar os arquivos no nível mais inferior da hierarquia antes de ir para os superiores
notion image

Lidar com Arquivos Zipados

  • As classes ZipInputStreams e ZipOutputStream possibilitam leitura e escrita de arquivos zip
Exemplo de como lidar com compressão de arquivos zip
Exemplo de como lidar com compressão de arquivos zip
Representando um arquivo zip como um sistema de arquivos
Representando um arquivo zip como um sistema de arquivos