Boteco Digital

Java um pouco sobre a classe File

Ao contrario do que podemos pensar a classe File em Java não representa um arquivo/diretório mas sim um caminho para um arquivo/diretório que pode ou não existir, então criar um objeto do tipo File não necessáriamente significa criar um arquivo, para isso pode-se utilizar um método especifico da classe, como também utilizamos outro método para saber se o arquivo já existe no sistema de arquivo . Veremos estes métodos a seguir.

Vamos então instanciar um objeto File e verificar se ele existe:

	import java.io.File;

	...

	File arquivo = new File("texto.txt");

	if( ! arquivo.exists() ){
		System.out.println("até aqui não foi criado um arquivo");
	}

Na linha 7 você foi chamando o método exists() quer retorna true se o arquivo representado pelo objeto existe no sistema de arquivos.

Vejamos agora como criar um arquivo vazio(para colocar conteudo dentro necessitamos de outras classes):

	try{
		if( arquivo.createNewFile() ){
			System.out.println("O arquivo foi criado");
		}else{
			System.out.println("O arquivo não foi criado, talvez ele já exista");
		}
	}catch(IOException ex){
		ex.printStackTrace();
	}

Criamos o arquivo na linha 2 através do método createNewFile() que retorna true se o arquivo for criado sem problemas ou false se ele já existir. Lembrando que o método createNewFile() pode lançar uma exceção (IOException) então ele deve estar em um bloco try…catch.

Como podemos criar um arquivo também podemos criar um diretório.

		File diretorio = new File("pasta");

		if( diretorio.mkdir() ){
			System.out.println("diretório criado com sucesso");
		}else{
			System.out.println("não foi possível criar o diretorio");
		}

		File sub = new File("pasta2"+File.separator+"subpasta");
		sub.mkdirs();

Para criar um diretório criamos o objeto File com o nome que desejamos para ele e depois chamamos o método mkdir() que retornará true se o diretório for criado e false se não.

Se quisermos criar um diretório dentro de outro diretório que também não existe utilizamos o método mkdirs() que ele irá criar toda a arvore de de diretórios. Lembrando que quando formos informar o caminho do diretório devemos utilizar o separador de diretórios utilizado pelo sistema operacional, e para evitar incompatibilidades podemos utilizar a constante File.separator.

Após criar um diretório podemos criar um arquivo dentro dele passando o objeto File representando o diretório como parâmentro para criar no novo arquivo:

	File dir = new File( "dir");

	if( dir.mkdir() ){
		System.out.println("Diretório criado");
	}else{
		System.out.println("Diretório não criado");
	}
	try{
		File file = new File(dir, "file.txt");
		if( file.createNewFile() ){
			System.out.println("Arquivo criado");
		}else{
			System.out.println("Arquivo não criado");
		}		
	}catch(IOException ex){
		ex.printStackTrace();
	}

Já que estamos falando em diretórios podemos listar os arquivos de um.

	File dir = new File("pasta");
	if( dir.isDirectory() ){
		String[] arqs = dir.list();
		for(String nome : arqs){
			System.out.println(nome);
		}
	}

Antes de tentar listar os arquivos de um diretório é uma boa idéia saber se ele é realmente um diretório, o que podemos ver utilizando o método isDirectory(), com um método parecido podemos também descobrir se ele é um arquivo normal: isFile().

Na linha 3 utilizamos o método list() que retorna um array de Strings contendo os nomes dos arquivos presentes no diretório, outro método que podemos utilizar é o listFiles que ao invés de retornar um array de String retorna um array de File

Vamos agora deletar nosso arquivo.

	if( arquivo.delete() ){
		System.out.println("O arquivo foi deletado");
	}else{
		System.out.println("O arquivo não foi deletado");
	}

O método delete() retorna true se o arquivo for deletado, caso contrario retorna false.

Vamos mudar o nome do arquivo agora.

	File novoNome = new File("pasta_renomeada");
	diretorio.renameTo( novoNome );

Para renomear primeiro precisamos criar um novo caminho ou seja um objeto File, chamamos o método renameTo() e passamos o novo caminha como parâmetro.

Nos exemplos acima estamos utilizando caminhos relativos(em relação ao deretório que estamos executando a aplicação) que acredito serem melhores em java pois deixa o código mais compativel entre S.O. mas em algumas situações precisamos obter o caminho absoluto(caminho que vem desde o a raiz do sistemas de arquivo) e podemos fazer isso através do método getAbsoluteFile()

	File arquivo  new File("texto.txt");
	System.out.println( arquivo.getAbsoluteFile() );

A classe File possui vários outro métodos que também podem ser uteis, como para saber as permissões de arquivos (canExecute() , canRead(), canWrite()) entre outras que podem ser vista na documentação.

Já nos estendemos demais, veremos como escrever em um arquivo em um próximo post.

Tags
Categorias Java
comments powered by Disqus