Entradas e Saídas em Java: Difference between revisions

From Wiki**3

No edit summary
(Redirected page to ist:Entradas e Saídas em Java)
 
(13 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{TOCright}}
#REDIRECT [[ist:Entradas e Saídas em Java]]
Mecanismos de entradas e saídas em Java. A classe File. Streams, Readers, Writers. Composição de canais. Acesso aleatório a ficheiros. Serialização de tipos primitivos e de objectos: a interface Serializable. Elementos não serializáveis: a palavra chave transient. Excepções associadas a entradas e saí­das.
 
== Mecanismos de Entrada e Saída de Dados ==
 
Mecanismos de entradas e saídas em Java. A classe File. Streams, Readers, Writers. Composição de canais. Acesso aleatório a ficheiros.
 
=== Exemplo: Leitor1 ===
 
<java5>
public class Leitor1 {
 
  public static void main(String[] args) throws IOException {
 
    //------------------------------------------------
    // Leitura de linhas
 
    BufferedReader in = new BufferedReader(new FileReader("Leitor1.java"));
    String s, s2 = new String();
    while((s = in.readLine()) != null) s2 += s + "\n";
    in.close();
    System.out.print(s2);
 
    //------------------------------------------------
    // Leitura do System.in (a.k.a. stdin)
 
    BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
    System.out.print("Enter a line: ");
    System.out.println(stdin.readLine());
 
  }
}
</java5>
 
=== Exemplo: Leitor2 ===
 
<java5>
public class Leitor2 {
 
  public static void main(String[] args) throws IOException {
 
    String s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 
    //------------------------------------------------
    // Leitura de memória (caracteres Unicode: 16 bits)
    StringReader strin = new StringReader(s);
    int c;
    while((c = strin.read()) != -1) System.out.println((char)c);
 
    //------------------------------------------------
    // Leitura formatada de memória (bytes: 8 bits)
    try {
 
      byte ba[] = s.getBytes();
      DataInputStream memin = new DataInputStream(new ByteArrayInputStream(ba));
      while(true) System.out.print((char)memin.readByte());
 
    }
    catch(EOFException e) { System.err.println("... já está!"); }
   
  }
}
</java5>
 
=== Exemplo: Escrita em Ficheiro (Escritor1) ===
 
<java5>
public class Escritor1 {
 
  public static void main(String[] args) throws IOException {
 
    try {
      //String s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
      //BufferedReader in = new BufferedReader(new StringReader(s));
 
      BufferedReader in = new BufferedReader(new FileReader("Escritor1.java"));
 
      PrintWriter  out =
        new PrintWriter(new BufferedWriter(new FileWriter("Escritor1.out")));
 
      int lineCount = 1;
      while((s = in.readLine()) != null ) out.printf("%3d: %s\n", lineCount++, s);
      out.close();
 
    }
    catch(EOFException e) { System.err.println("... já está!"); }
 
  }
 
}
</java5>
 
=== Exemplo: Escrita de Leitura Binárias (dados) (Escritor2) ===
 
<java5>
public class Escritor2 {
 
  public static void main(String[] args) throws IOException {
 
    try {
 
      DataOutputStream out =
        new DataOutputStream(new BufferedOutputStream(new FileOutputStream("raw.dat")));
 
      out.writeUTF("Valor de PI");
      out.writeDouble(Math.PI);
      out.writeUTF("Raiz quadrada de 2");
      out.writeDouble(Math.sqrt(2));
      out.close();
 
      DataInputStream in =
        new DataInputStream(new BufferedInputStream(new FileInputStream("raw.dat")));
 
      System.out.println(in.readUTF());
      System.out.println(in.readDouble());
      System.out.println(in.readUTF());
      System.out.println(in.readDouble());
 
    }
    catch(EOFException e) { throw new RuntimeException(e); }
 
  }
 
}
</java5>
 
=== Exemplo: Leitura e Escrita de Acesso Aleatório ===
 
<java5>
public class LeituraEscritaAleatória {
 
  public static void main(String[] args) throws IOException {
 
    RandomAccessFile rf = new RandomAccessFile("raw.dat", "rw");
    for(int i = 0; i < 10; i++) rf.writeDouble(i * 1.414);
    rf.close();
 
    rf = new RandomAccessFile("raw.dat", "rw");
    rf.seek(5*8);
    rf.writeDouble(47.0001);
    rf.close();
 
    rf = new RandomAccessFile("raw.dat", "r");
    for(int i = 0; i < 10; i++)
      System.out.println("Valor " + i + ": " + rf.readDouble());
    rf.close();
 
  }
 
}
</java5>
 
== Serialização de Objectos ==
 
Serialização de tipos primitivos e de objectos: a interface Serializable. Elementos não serializáveis: a palavra chave transient.
 
=== Exemplo: Zorg e Zog ===
 
<java5>
class Alienígena implements Serializable {
  String _nome;
  transient String _segredo = "7";
  public Alienígena(String n) { _nome = n; _segredo = _nome + _nome.length(); }
  public void voing() { System.out.println(_nome + (_segredo != null ? _segredo : "")); }
}
</java5>
 
<java5>
public class Serialização {
  public static void main(String[] args) throws IOException, ClassNotFoundException {
 
    Alienígena a1 = new Alienígena("Zorg"), a2 = new Alienígena("Zog");
    a1.voing();  //output: ZorgZorg4
    a2.voing();  //output: ZogZog3
 
    ObjectOutputStream out =
      new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("raw.dat")));
    out.writeObject(a1); out.writeObject(a2);
    out.close();
 
    ObjectInputStream in =
      new ObjectInputStream(new BufferedInputStream(new FileInputStream("raw.dat")));
    Alienígena r1 = (Alienígena)in.readObject();  // pode lançar “StreamCorruptedException”
    Alienígena r2 = (Alienígena)in.readObject();
    r1.voing();  //output: Zorg
    r2.voing();  //output: Zog
 
  }
}
</java5>
 
== Exercícios ==
 
* [[Entradas e Saídas em Java/Exercício 01: Leitura de Ficheiros de Texto|Exercício 01: Leitura de Ficheiros de Texto]]
* [[Entradas e Saídas em Java/Exercício 02: Leitura de Ficheiro Binário|Exercício 02: Leitura de Ficheiro Binário]]
* [[Entradas e Saídas em Java/Exercício 03: Serialização de Objectos|Exercício 03: Serialização de Objectos]]
 
[[category:Java]]
[[category:OOP]]
[[category:Teaching]]

Latest revision as of 16:51, 7 November 2018