Java NIO - Arquivo

O pacote Java NIO fornece mais uma API de utilitário denominada Files que é basicamente usada para manipular arquivos e diretórios usando seus métodos estáticos que funcionam principalmente no objeto Path.

Conforme mencionado no tutorial Path, essa interface Path é introduzida no pacote Java NIO durante a versão Java 7 no pacote de arquivos. Portanto, este tutorial é para o mesmo pacote de arquivos.

Esta classe consiste exclusivamente em métodos estáticos que operam em arquivos, diretórios ou outros tipos de arquivos. Na maioria dos casos, os métodos definidos aqui delegam ao provedor de sistema de arquivos associado a execução das operações de arquivo.

Existem muitos métodos definidos na classe Files que também podem ser lidos em documentos Java. Neste tutorial, tentamos cobrir alguns dos métodos importantes entre todos os métodos da classe Java NIO Files.

Métodos importantes da classe Files.

A seguir estão os métodos importantes definidos na classe Arquivos Java NIO.

  • createFile(Path filePath, FileAttribute attrs) - A classe Files fornece este método para criar arquivos usando o caminho especificado.

Exemplo

package com.java.nio;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class CreateFile {
   public static void main(String[] args) {
      //initialize Path object
      Path path = Paths.get("D:file.txt");
      //create file
      try {
         Path createdFilePath = Files.createFile(path);
         System.out.println("Created a file at : "+createdFilePath);
      } 
      catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Resultado

Created a file at : D:\data\file.txt
  • copy(InputStream in, Path target, CopyOption… options) - Este método é usado para copiar todos os bytes do fluxo de entrada especificado para o arquivo de destino especificado e retorna o número de bytes lidos ou gravados como valor longo.LinkOption para este parâmetro com os seguintes valores -

    • COPY_ATTRIBUTES - copia atributos para o novo arquivo, por exemplo, atributo da hora da última modificação.

    • REPLACE_EXISTING - substitua um arquivo existente se ele existir.

    • NOFOLLOW_LINKS - Se um arquivo for um link simbólico, o link em si, não o destino do link, será copiado.

Exemplo

package com.java.nio;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.List;
public class WriteFile {
   public static void main(String[] args) {
      Path sourceFile = Paths.get("D:file.txt");
      Path targetFile = Paths.get("D:fileCopy.txt");
      try {
         Files.copy(sourceFile, targetFile,
         StandardCopyOption.REPLACE_EXISTING);
      }
      catch (IOException ex) {
         System.err.format("I/O Error when copying file");
      }
      Path wiki_path = Paths.get("D:fileCopy.txt");
      Charset charset = Charset.forName("ISO-8859-1");
      try {
         List<String> lines = Files.readAllLines(wiki_path, charset);
         for (String line : lines) {
            System.out.println(line);
         }
      } 
      catch (IOException e) {
         System.out.println(e);
      }
   }	
}

Resultado

To be or not to be?
  • createDirectories(Path dir, FileAttribute<?>...attrs) - Este método é usado para criar diretórios usando o caminho fornecido, criando todos os diretórios pais inexistentes.

  • delete(Path path) - Este método é usado para excluir o arquivo do caminho especificado. Ele lança NoSuchFileException se o arquivo não existir no caminho especificado ou se o arquivo for um diretório e não estiver vazio e não puder ser excluído.

  • exists(Path path) - Este método é usado para verificar se o arquivo existe no caminho especificado e se o arquivo existe retornará verdadeiro ou então retornará falso.

  • readAllBytes(Path path) - Este método é usado para ler todos os bytes do arquivo em um determinado caminho e retorna a matriz de bytes que contém os bytes lidos do arquivo.

Exemplo

package com.java.nio;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
public class ReadFile {
   public static void main(String[] args) {
      Path wiki_path = Paths.get("D:file.txt");
      Charset charset = Charset.forName("ISO-8859-1");
      try {
         List<String> lines = Files.readAllLines(wiki_path, charset);
         for (String line : lines) {
            System.out.println(line);
         }
      } 
      catch (IOException e) {
         System.out.println(e);
      }
   }	
}

Resultado

Welcome to file.
  • size(Path path) - Este método é usado para obter o tamanho do arquivo no caminho especificado em bytes.

  • write(Path path, byte[] bytes, OpenOption… options) - Este método é usado para gravar bytes em um arquivo no caminho especificado.

Exemplo

package com.java.nio;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
public class WriteFile {
   public static void main(String[] args) {
      Path path = Paths.get("D:file.txt");
      String question = "To be or not to be?";
      Charset charset = Charset.forName("ISO-8859-1");
      try {
         Files.write(path, question.getBytes());
         List<String> lines = Files.readAllLines(path, charset);
         for (String line : lines) {
            System.out.println(line);
         }
      } 
      catch (IOException e) {
         System.out.println(e);
      }
   }
}

Resultado

To be or not to be?