UFPR · DELT · Contact
Programação Java
Esta aula aborda os seguintes conceitos:
  1. Tratamento de excessões.
  2. Arquivos.
Tratamento de excessões
Quando um erro ocorre dentro do processamento do código de um método, o método pode criar um objeto para permitir que o chamador deste método seja informado sobre a natureza do erro. O objeto é chamado exception object e é disponibilizado para o run time system.
Para referência, ver https://docs.oracle.com/javase/tutorial/essential/exceptions/definition.html.

Considere o seguinte código:
// Arquivo TesteExcessao1.java
import java.io.*;
public class TesteExcessao1{

   public static void main(String args[]){
      try{
         int a[] = new int[10];
         for (int i=0;i<=10;i++)
              a[i]=0;
      }
      catch(ArrayIndexOutOfBoundsException e){
         System.out.println("Excessão lançada:" + e);
      }
      finally {
         System.out.printf("\nfim\n");
      }
    }
}
Com relação ao código acima, responda as seguintes perguntas:
  1. Qual o erro do programa? Execute o programa e observe o resultado.
  2. Remova o bloco try...catch...finally e execute novamente o programa. Qual a diferença em relação a presença do try...catch?
  3. Quando o bloco catch é executado?
  4. Pode existir mais de um bloco catch? Em que casos?
  5. Quando o bloco finally é executado? Sua presença é obrigatória com o uso do try...catch?
  6. Como reconhecer quando um método lança uma excessão? (veja como exemplo o uso de arquivos, no próximo item).
  7. É possível escrever um método que lança uma excessão?
Arquivos
A linguagem Java fornece muitas classes que facilitam a manipulação de arquivos. Para referência, ver http://www.tutorialspoint.com/java/java_files_io.htm
Considere o seguinte código:
//Arquivo Learquivo.java
import java.io.*;
import java.util.*;

public class Learquivo{
   public static void main(String args[]){
        FileReader reader=null;
        BufferedReader br=null;
        Scanner scanner = new Scanner(System.in);
        String s, arq;

        int i=0;  

        if (args.length==0){
            System.out.println("Digite o nome do arquivo: ");
            arq=scanner.nextLine();
        } 
        else  
            arq=args[0];

        try {
            reader = new FileReader(arq);
            br = new BufferedReader(reader);

            while( (s=br.readLine()) != null){
               i++;
               System.out.printf("\nLinha %d: %s", i, s);
            }
            System.out.printf("\n\n");
        } 
        catch (IOException e) {
            System.out.println("Erro na leitura do arquivo:" + e);
        }
        finally {
            if(reader != null){
                try {
                    reader.close();
                } catch (IOException e) {
                      System.out.println("Erro fechando o arquivo" + e);
                }
            }
            System.out.println("--- Fim de arquivo ---");
        }
    }
}
Com relação ao código acima, responda as seguintes perguntas:
  1. Porque o uso do bloco try...catch é obrigatório neste caso?
  2. O bloco "catch (IOException e)" trata excessões geradas por qual método?
  3. Inclua um bloco catch para tratar excessões geradas pelo construtor do FileReader.
  4. Modifique o programa para apresentar o conteúdo do arquivo da seguinte forma: uma coluna com o endereço base em Hexa, uma segunda coluna com 16 bytes em hexadecimal (sem espaços) e uma terceira coluna que apresenta os caracteres respectivos da tabela ASCII.
  5. Implemente um programa que lê strings digitadas pelo usuário e grava em um arquivo com nome escolhido pelo usuário. Use a classe FileWriter.
Soluções
Soluções para os problemas propostos podem ser encontradas em http://www.eletrica.ufpr.br/pedroso/2015/TE091/Programas/java

Voltar para página da TE091