UNIVERSIDADE FEDERAL DE MINAS GERAIS
DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO

ENTRADA E SAIDA SIMPLIFICADAS EM JAVA
PACOTE MyIo
Roberto da Silva Bigonha
Eduardo Santos Cordeiro
agosto de 2006

Web Analytics Made Easy -
StatCounter

1. Objetivos

O pacote MyIo visa prover uma pequena biblioteca de quatro classes para simplificar a programação de entrada e saída de pequenos programas em Java.

2. Instalação do MyIo

2.1 Instalação no JDK (Janela DOS)

Para instalar e usar a biblioteca MyIo em um ambiente de trabalho com uma pasta de nome Java, criada na na unidade de disco rígido C: de um PC configurado com Windows 2000 ou XP, deve-se seguir os seguintes passos:
  1. Criar dois diretórios de nomes MyIo e TesteDeMyIo dentro da pasta C:\Java.
  2. Configurar a variável de ambiente classpath adequadamente, conforme mostrado abaixo, para que o diretório MyIo seja encontrado pelo compilador javac. Para as definições de diretório faça o seguinte:
    1. Clique Botão direito em "Meu Computador"
    2. Selecione "Propriedades"
    3. Selecione "Avançado"
    4. Selecione "variáveis de ambiente"
    5. Atualize ou inclua a variável de ambiente "CLASSPATH" com o valor .;C:\Java.
  3. Baixar o arquivo MyIo.zip.
  4. Extrair de MyIo.zip os arquivos Kbd.class, Screen.class, IntText.class e OutText.class e gravá-los no diretório MyIo.
  5. Extrair de MyIo.zip os arquivos de teste TestKS.java, TestInText.java, TestInTextEof.java e TestOutText.java e gravá-los na pasta TesteDeMyIo
  6. Sugere-se que os programas Java que usarem o pacote MyIo devem ser armazenados em pastas irmãs a do pacote TesteDeMyIo. O pacote MyIo deve ser importado para cada uma destas pastas.

2.2 Instalação no Eclipse

Para instalar e usar a biblioteca MyIo em um projeto na IDE Eclipse, versão 3.1 ou superior, siga os seguintes passos:
  1. Baixar o arquivo MyIo.jar. Em alguns browsers, o arquivo MyIo.jar é inexplicavelmente baixado com o nome trocado para MyIo.zip. Neste caso, deve-se renomear o arquivo baixado para MyIo.jar.
  2. Crie uma pasta C:\Java e copie para essa pasta o arquivo MyIo.jar
  3. Crie o seu projeto Java normalmente no Eclipse
  4. Na visão "Package Explorer", clique com o botão direito no seu projeto e vá em "Build Path > Add External Archives..."
  5. Selecione o arquivo MyIo.jar

2.3 Instalação no NetBeans

Para instalar e usar a biblioteca MyIo em um projeto na IDE Netbeans, versão 5.0 ou superior:
  1. Baixar o arquivo MyIo.jar. Em alguns browsers, o arquivo MyIo.jar é inexplicavelmente baixado com o nome trocado para MyIo.zip. Neste caso, deve-se renomear o arquivo baixado para MyIo.jar.
  2. Crie uma pasta C:\Java e copie para essa pasta o arquivo MyIo.jar
  3. Crie o seu projeto Java normalmente no Netbeans
  4. Na visão "Projects", clique com o botão direito no seu projeto e vá em "Properties"
  5. Selecione o item "Libraries" e clique no botão "Add JAR/Folder"
  6. Selecione o arquivo MyIo.jar e feche a janela "Properties"

3. Classes de MyIo

As classes do pacote são: Screen, Kbd, InText e OutText. Os arquivo fontes (.java) da implementação dessas classes podem ser baixados, sem custo,
MyIo-fontes.zip.

A seguir, apresentam-se as interfaces das classes de MyIo

3.1 Classe Screen

Os métodos abaixo convertem o parâmetro dado para uma cadeia de caracteres ASCII e os envia para o monitor de vídeo, para exibição a partir da posição corrente do cursor. Os métodos cujos nomes terminam por ln forçam uma mudança de linha após a escrita.
  • final static public void println()
  • final static public void print(String s)
  • final static public void println(String s)
  • final static public void print(boolean b)
  • final static public void println(boolean b)
  • final static public void print(byte b)
  • final static public void println(byte b)
  • final static public void print(char c)
  • final static public void println(char c)
  • final static public void print(int i)
  • final static public void println(int i)
  • final static public void print(long n)
  • final static public void println(long n)
  • final static public void print(float f)
  • final static public void println(float f)
  • final static public void print(double d)
  • final static public void println(double d)

3.2 Classe Kbd

Os métodos de Kbd abrem o teclado para leitura e os caracteres digitados são convertidos para o tipo indicado no seu nome. Brancos e caracteres de controle de linha antes do valor lido são ignorados. A sequência de caracteres lida termina com um caractere branco ou de controle de linha. A sequência lida será convertida para int, float, double ou String conforme o método de leitura chamado.
  • final static public boolean readBoolean() throws IOException
  • final static public int readInt() throws IOException
  • final static public long readLong() throws IOException
  • final static public float readFloat() throws IOException
  • final static public double readDouble() throws IOException
  • final static public String readString() throws IOException

3.3 Classe IntText

Os métodos de InText funcionam como os de Kbd, exceto que os caracteres são lidos do arquivo cujo nome foi informado ao método construtor da classe, que toma as providências de abertura do arquivo especificado.
  • public InText(String fileName) throws IOException
  • final public boolean readBoolean( ) throws IOException
  • final public byte readByte( ) throws IOException
  • final public int readInt( ) throws IOException
  • final public long readLong( ) throws IOException
  • final public float readFloat( ) throws IOException
  • final public double readDouble( ) throws IOException
  • final public String readString( ) throws IOException
A tentativa de leitura além da marca de fim de arquivo gera a exceção IOException.

3.4 Classe OutText

Os métodos de OutText são análogos aos de Screen, exceto que a saída é direcionada para o arquivo de texto criado pela função construtora da classe.
  • public OutText(String fileName) throws IOException
  • final public void println()
  • final public void print(String s)
  • final public void println(String s)
  • final public void print(boolean b)
  • final public void println(boolean b)
  • final public void print(byte i)
  • final public void println(byte i)
  • final public void print(short i)
  • final public void print(String s)
  • final public void println(short i)
  • final public void print(int i)
  • final public void println(int i)
  • final public void print(long n)
  • final public void println(long n)
  • final public void print(float f)
  • final public void println(float f)
  • final public void print(double d)
  • final public void println(double d)
  • final public void println(String s)

4. Exemplos de Uso

4.1 Arquivo TestKbd.java

import java.io.*;
import MyIo.*;
public class TestKS {
  public static void main(String[] args) throws IOException {
     boolean b = false;  int x = 0;  long r = 0;
     float y =(float) 0.0;  double d = 0.0;
     String s = "indefinido"; 
     Screen.println("Entre com os valores:"); 

     Screen.print("boolean b = ");
     b = Kbd.readBoolean() ;
     Screen.print("b lido = "); Screen.println(b); 

     Screen.print("int x  = ");
     x = Kbd.readInt() + 1;
     Screen.print("x + 1 = "); Screen.println(x); 

     Screen.print("long r  = ");
     r = Kbd.readLong() + 1 ;
     Screen.print("r + 1 = "); Screen.println(r);
 
     Screen.print("float y = ");
     y = Kbd.readFloat() + (float) 1.0;
     Screen.print("y + 1.0 = " ); Screen.println(y);
 
     Screen.print("double d = ");
     d = Kbd.readDouble() + 1.0;
     Screen.print("d + 1.0 = "); Screen.println(d);
 
     Screen.print("String s = ");
     s = Kbd.readString();
     Screen.print("s = "); Screen.println(s);
  }
}

4.2 Arquivo TestInText.java

import java.io.*;
import MyIo.*;
public class TestInText {
  public static void main(String[] args) throws IOException {
     boolean b = false;
     byte e = 0;
     char c = 'A';
     int x = 0;
     long r = 0;
     float y =(float) 0.0;
     double d = 0.0;
     String s = "indefinido";
 
     InText in = new InText(args[0]);
 
     b = in.readBoolean() ;
     Screen.println("boolean b lido = " + b);
 
     e = in.readByte();
     Screen.println("byte e lido = " + e);
 
     x = in.readInt();
     Screen.println("int x lido = " + x);
 
     r = in.readLong();
     Screen.println("long r lido = " + r);
 
     y = in.readFloat();
     Screen.println("float y lido = " + y);
 
     d = in.readDouble();
     Screen.println("double d lido = " + d);
 
     s = in.readString();
     Screen.println("String s lido = " + s);
  }
}

4.3 Arquivo TestInTextEof.java

import java.io.*;
import MyIo.*;
public class TestInTextEof {
    public static void main(String[] args)  {
        boolean b = false; byte e = 0; char c = 'A';int x = 0;
        long r = 0; float y =(float) 0.0; double d = 0.0;
        String s = "indefinido";        
        try {
            InText in = new InText(args[0]);

            b = in.readBoolean() ;
            Screen.println("boolean b lido = " + b);              
            e = in.readByte();
            Screen.println("byte e lido = " + e);               
            x = in.readInt();
            Screen.println("int x lido = " + x);            
            r = in.readLong();
            Screen.println("long r lido = " + r);             
            y = in.readFloat();
            Screen.println("float y lido = " + y);            
            d = in.readDouble();
            Screen.println("double d lido = " + d);           
            s = in.readString();
            Screen.println("String s lido = " + s);
        }
        catch(Exception ex){
            Screen.println("Fim de arquivo lido inesperadamente");
        }
   }  
} 

4.4 Arquivo TestOutText.java

import java.io.*;
import MyIo.*;
public class TestOutText {
  public static void main(String[] args) throws IOException {
     boolean b = false; byte e = 0; char c = 'A'; int x = 0; 
     long s = 0; float y =(float) 0.0; double d = 0.0; 

     InText in = new InText(args[0]);
     OutText out = new OutText(args[1]); 

     b = in.readBoolean() ;
     Screen.println("boolean b lido = " + b);
     out.print(b); out.print(" "); 

     e = in.readByte();
     Screen.println("byte e lido = " + e);
     out.print(e); out.print(" "); 

     x = in.readInt();
     Screen.println("int x lido = " + x);
     out.print(x); out.print(" "); 

     s = in.readLong();
     Screen.println("long s lido = " + s);
     out.print(s); out.print(" "); 

     y = in.readFloat();
     Screen.println("float y lido = " + y);
     out.print(y); out.print(" "); 

     d = in.readDouble();
     Screen.println("double d lido = " + d);
     out.print(d);  out.print(" ");
  }
} 

5. Tratamento de Fim de Arquivo

Para manter o pacote mais simples o possível, não há tratamento automático de fim de arquivo. Se o fim de arquivo for lido indevidamente, o programa será cancelado. O programador deve prover uma marca no fim de cada arquivo e explicitamente testá-la para evitar o cancelamento do programa.
© Roberto da Silva Bigonha