Apresentaçãoe divulgação

A última edição foi um marco muito importante para o nosso projecto. Nunca a Revista PROGRAMAR tinha sido tão falada, tão divulgada e, principalmente, nunca tinha sido tão lida. Foi também após o lançamento da quarta edição que fizemos a nossa primeira apresentação pública, que teve lugar no BarCampPT 2006. Este evento decorreu no Pólo 2 da Universidade de Coimbra e teve com o público profissionais e amadores da nossa área.
Continuar a ler

Input/Output em Java

Neste artigo vamos abordar uma matéria que, a nosso ver, é bastante interessante e importante no mundo da programação: o input/output, neste caso aplicado a Java.

Iremos começar com manipulação de ficheiros e directorias. Vamos ver a seguinte classe Java, onde são demostradas as principais funções da classe File, que é a utilizada para realizar a manipulação. Em seguida vamos explicar o que cada linha faz.

import java.io.*;

public class JavaFile {
   public static void main(String args[]) {
      File file = new File("C:\\file.txt");

      System.out.println( file.getName() ); 

      file.setReadOnly();

      System.out.println( file.isHidden() );
      System.out.println( file.canRead() );
      System.out.println( file.canWrite() );

      file.renameTo( new File("C:\\Ficheiro.txt") ); 

      try {
         if( !file.exists() ) {
            file.createNewFile();
         }
      }
      catch(Exception e){
         System.out.println(e.getMessage());
      }

      if( file.isDirectory() ) {
         System.out.println("Directoria");
      }
      else if( file.isFile() ){
         System.out.println("Ficheiro");
      }

      File [] roots = file.listRoots( );

      for (int i = 0; i < roots.length; i++) {
         System.out.println (roots[i] );
      }

      file.delete();
   }
}

Como podemos ver na linha 5 é instanciado um objecto File que representa o caminho (path) para um possível local do sistema operativo, é bom lembrar que apenas representa um ficheiro ou directoria, não pressupondo que o caminho exista realmente. Neste caso o caminho é o C:\\file.txt, que aponta para o ficheiro file.txt na directoria C:. Também poderia apontar apenas para uma directoria e não para uma ficheiro, como é o caso.

Na linha 7 podemos ver o método getName() que permite obter o nome do ficheiro ou directoria representada pelo File.

Esta classe permite também dar atributos a ficheiros ou directorias, como é o caso do método setReadOnly(), que dá ao ficheiro ou directoria o atributo de apenas poder ser lido e não escrito, tal como esta representado na linha 9.

A classe File permite também verificar atributos e, para isso, podemos usar os métodos isHidden() que verifica se o ficheiro ou directoria se encontra oculto(a) (linha 11), canRead() que verifica se é possível ler o ficheiro ou directoria (linha 12) e o método canWrite() que verifica se é possível escrever no ficheiro ou directoria (linha 13).

O método renameTo() na linha 15 permite renomear um ficheiro ou directoria, mas para além disso permite também mover ficheiros e directorias, bastando para isso dar um caminho diferente no novo nome a dar, o que não é o caso neste exemplo.

Os métodos exists() e createNewFile() (linha 18 e linha 19), são dois métodos muito importantes na manipulação de ficheiros e directorias. O método exists() permite verificar se o ficheiro ou directoria representados no File existe. O método createNewFile() cria um novo ficheiro com o caminho representado. Neste caso iria criar o ficheiro file.txt na directoria C:.

Embora aqui não presente, também temos os métodos mkdir() e mkdirs() que têm a mesma funcionalidade que o método createNewFile(), mas neste caso é criada uma directoria. A diferença do mkdir() para o mkdirs() é basicamente que o método mkdir() apenas cria uma directoria num caminho já existem, ou seja, por exemplo, o seguinte caminho C:\Programas\ o mkdir() poderia criar directorias dentro da directoria Programas apenas e só se a referida directoria já existisse previamente. Já o mkdirs() permite criar toda a árvore de directorias, mesmo se esta não existisse.

Nas linhas 26 e 29 podemos ver os métodos isDirectory() e isFile() que verificam respectivamente se o caminho dado é um directorio ou um ficheiro.

Na linha 33 temos o método listRoots(). Trata-se de um método bastante útil, nomeadamente em sistemas Windows, visto que ele devolve um array com todas a drives ou raízes do sistema operativo, por exemplo A:, C:, D:, E:, etc… Já em sistemas GNU/Linux o conteúdo do array será apenas /, visto ser a raiz do sistema.

Para terminhar esta parte do artigo, temos na linha 39 o método delete(), que como o proprio nome indica, permite eliminar o ficheiro ou directoria representado pelo File.