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