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.
[sourcecode lang=”java”] FileSystem defaultFS = FileSystems.getDefault();[/sourcecode]
Agora criamos um objeto da classe Path que representa o diretório D:\java
[sourcecode lang=”java”]Path basePath = defaultFS.getPath(“D:\\”, “java”); [/sourcecode]
Os objetos Path podem referenciar diretórios e arquivos.
[sourcecode lang=”java”]Path temp1 = basePath.resolve(“temp1″+
File.separator + “meu_arquivo.txt”);
Path temp2 = basePath.resolve(“temp2″);[/sourcecode]
Usamos a classe Files para criar o diretório com o método estático createDirectories()
[sourcecode lang=”java”]Files.createDirectories(temp2); [/sourcecode]
Abaixo copiamos o arquivo para outro diretório substituindo caso exista.
[sourcecode lang=”java”]Files.copy(temp1, temp2,
StandardCopyOption.REPLACE_EXISTING ); [/sourcecode]
Para move o arquivo para outro diretório substituindo caso exista usamos o código abaixo.
[sourcecode lang=”java”]Files.move(temp1, temp3.resolve(“fim.txt”),
StandardCopyOption.REPLACE_EXISTING); [/sourcecode]
Para saber se o arquivo existe
[sourcecode lang=”java”]System.out.println(“File exists ” + Files.exists(temp1)); [/sourcecode]
Mostramos o tamanho do arquivo em bytes
[sourcecode lang=”java”]System.out.println(Files.size(temp2) + ” bytes”); [/sourcecode]
O código abaixo lista os diretórios raízes, no windows retornaria C:\, D:\, E:\ etc.
[sourcecode lang=”java”]FileSystem defaultFS = FileSystems.getDefault();
Iterable
for(Path pth : rootDirectories){
System.out.println(pth.toString());
}[/sourcecode]
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:
[sourcecode lang=”java”]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(); [/sourcecode]
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
Pingback: Operador diamante no Java7 » Roberto Furutani