Em muitas aplicações, além do desenvolvimento de regras de negócio, é necessário gerenciar arquivos e/ou diretórios, criando, excluindo ou copiando os mesmos para outras localizações. Para essas finalidades, o sistema operacional oferece, através do shell, um conjunto de comandos capaz de criar, excluir e gerenciar arquivos, além de ser possível executar tais comandos em aplicações Java; porém, essa não é uma solução ideal para ser utilizada, pois leva a uma vinculação muito forte da aplicação ao sistema operacional, desperdiçando assim a portabilidade da plataforma Java e, em muitos casos, degradando a performance do sistema.
Vale ressaltar que é muito comum ocorrerem situações em que projetos de software precisem ser migrados para plataformas diferentes, implicando em adaptações que muitas vezes são difíceis, pois cada plataforma tem a sua forma de manipular arquivos, comandos específicos e detalhes sobre o funcionamento do sistema de arquivos. Para superar essa barreira e ser possível criar aplicações multiplataforma, a linguagem Java oferece comandos genéricos para realizar a manipulação de arquivos sem criar um vínculo forte com a plataforma e, ao mesmo tempo, permitindo o controle e o tratamento de erros.
Para tais finalidades, o pacote java.io oferece a classe File. Esta classe permite a criação, exclusão e outras operações com arquivos. Adicionalmente, o mesmo pacote também disponibiliza streams para arquivos, que são canais de comunicação direcionados para gravar e ler dados de arquivos.
A fim de mostrar o funcionamento de tais recursos, é proposta uma aplicação exemplo que realiza as principais operações de manipulação de arquivos, incluindo a cópia de arquivos por streams e o controle de erros em cada operação. Por fim, é proposta também uma interface gráfica para a aplicação exemplo, visando melhorar a sua usabilidade.
A classe java.io.File
A classe java.io.File está presente desde o JDK 1.0 e oferece uma abstração de arquivo como sendo um recurso, escondendo detalhes de funcionamento do sistema operacional. Uma instância de File tem a função de apontar para um arquivo ou diretório no sistema de arquivos e disponibiliza vários comandos para manipular o recurso referenciado. Seus construtores são listados a seguir:
· File(File parent, String child): Cria um novo objeto File com o caminho indicado por parent concatenado ao valor de child. Não é necessário que o arquivo ou diretório apontado exista;
· File(String pathname): Cria uma nova instância de File usando uma String com o caminho até o recurso;
· File(String parent, String child): Cria um novo objeto File com o caminho indicado por parent concatenado ao valor de child. Não é necessário que o arquivo ou diretório apontado exista;
· File(URI uri): Recebe como parâmetro o caminho para um recurso (URI), que pode ser um arquivo, diretório ou outro recurso local ou remoto.
[scheme:]content[#fragment]. Onde: scheme é o tipo de recurso indicado pela URI, que pode ser um nome
de protocolo ou indicador de arquivo em um determinado sistema operacional; o
conteúdo, dado por content, é um
caminho e/ou o nome do objeto; e fragment
é opcional e informa uma posição específica no recurso, como por exemplo, o nome
de um marcador (landmark) HTML, iniciado sempre por #, como na Listagem 1, que, adicionalmente, mostra
outros tipos de URIs.
Listagem 1. Exemplos de URI.
// Arquivo no Windows:
file:///c:\calendar.
// Arquivo no Linux:
file:///~/calendar.
// Endereço de e-mail:
mailto:java-net@java.sun.com.
// Esquema de Grupos de Notícias e Artigos:
news:comp.lang.java.
//Marcador em página HTML:
http://docs.oracle.com/javase/7/docs/api/java/io/File.html#delete().
É importante observar nessa listagem que para criar URIs para arquivos no Windows, aciona-se o sufixo “file:///”, e para arquivos no Linux, adiciona-se o sufixo “file://” (sendo a terceira barra no ...