Olá

Trabalhar com arquivos no Java7 ficou muito mais fácil com a introdução da classe java.nio.file.Files. Com esta classe copiar, mover, apagar e outras operações básicas ficaram muito simples.
A seguir veremos alguns exemplos:
O trecho abaixo obtém o sistemas de arquivos padrão acessível pela JVM.

 FileSystem defaultFS = FileSystems.getDefault();

Agora criamos um objeto da classe Path que representa o diretório D:\java

Path basePath = defaultFS.getPath("D:\\", "java"); 

Os objetos Path podem referenciar diretórios e arquivos.

Path temp1 = basePath.resolve("temp1"+
              File.separator + "meu_arquivo.txt");
			Path temp2 = basePath.resolve("temp2");

Usamos a classe Files para criar o diretório com o método estático createDirectories()

Files.createDirectories(temp2); 

Abaixo copiamos o arquivo para outro diretório substituindo caso exista.

Files.copy(temp1, temp2,
                StandardCopyOption.REPLACE_EXISTING ); 

Para move o arquivo para outro diretório substituindo caso exista usamos o código abaixo.

Files.move(temp1, temp3.resolve("fim.txt"),
                StandardCopyOption.REPLACE_EXISTING); 

Para saber se o arquivo existe

System.out.println("File exists " + Files.exists(temp1)); 

Mostramos o tamanho do arquivo em bytes

System.out.println(Files.size(temp2) + " bytes"); 

O código abaixo lista os diretórios raízes, no windows retornaria C:\, D:\, E:\ etc.

FileSystem defaultFS = FileSystems.getDefault();
		Iterable<Path> rootDirectories = defaultFS.getRootDirectories();
		for(Path pth : rootDirectories){
			System.out.println(pth.toString());
		}

Para mim a API foi bem escrita, é bem auto-explicativa.
Por enquanto minha ressalva é quanto as permissões no padrão POSIX, achei elas complicadas de serem aplicadas.

Antes de ter a classe Files para copiar um arquivo geralmente faríamos:

FileInputStream in =
                 new FileInputStream("D:\arquivo.txt");
            FileOutputStream out = new FileOutputStream("D:\destino.txt");
            byte[] buf = new byte[1024];
            int i = 0;
            while ((i = in.read(buf)) != -1) {
                out.write(buf, 0, i);
            }
            in.close();
            out.close(); 

No Java 7 não precisa dar close nos recursos que implementam java.lang.AutoCloseable. Assim você não corre mais riscos de esquece preso um recurso.

Até mais,
Roberto

Share


Um comentário

  1. #
    Operador diamante no Java7 » Roberto Furutani
    agosto 13th, 2012 at 21:00

    […] já faz quase um ano que escrevi dois posts sobre java 7, um sobre arquivos e outro sobre switch e catch multiplos. Hoje o post é sobre o diamante <>, o […]

    Responda a esse comentário

Deixe um comentário