JAVA - Apostila
532 pág.

JAVA - Apostila


DisciplinaProgramação Orientada A Objetos3.926 materiais57.511 seguidores
Pré-visualização28 páginas
4 public Input getInput() {
return new TextualInput();
6 }
8 @Override
public Output getOutput() {
10 return new TextualOutput();
}
12
}
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 383 / 527
Padrões de Projeto \u2013 Abstract Factory
Exemplo \u2013 Fábrica Concreta \u2013 GraphicalFactory
1 public class GraphicalFactory extends IOFactory {
3 @Override
public Input getInput() {
5 return new GraphicalInput();
}
7
@Override
9 public Output getOutput() {
return new GraphicalOutput();
11 }
13 }
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 384 / 527
Padrões de Projeto \u2013 Abstract Factory
Exemplo \u2013 Uso
public static void main( String[] args ) {
Output out = IOFactory.getIOFactory().getOutput();
out.escrever( "Abstract Factory por Ricardo Terra" );
}
Saída
11:10 12:20
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 385 / 527
6. Tópicos Relevantes \u2013 Conteúdo
1 Introdução 3
2 UML 22
3 Java 60
4 POO 183
5 Padrões de Projeto 356
6 Tópicos Relevantes 386
Streams 387
7 Materiais Complementares 417
8 Extras 498
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 386 / 527
Tópicos Relevantes
Streams
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 387 / 527
Tópicos Relevantes \u2013 Streams
Objetivos desta seção
Manipulação de arquivos texto e binário
Serialização de objetos Java
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 388 / 527
Tópicos Relevantes \u2013 Streams
Classe java.io.File
Classe responsável em realizar métodos em arquivos físicos.
Para se construir um objeto do tipo File, deve saber o
nome completo do arquivo. Caso o arquivo esteja na raiz
do workspace do Eclipse pode apenas passar o nome do
arquivo
Caso se passe o nome de um arquivo que não existe, este é
criado na primeira necessidade
Exemplo:
new File("C:\\pasta\\meuArquivo.txt")
new File("meuArquivoNoWorkspace.txt")
new File("/dev/etc/xpto.txt")
new File("/bin")
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 389 / 527
Tópicos Relevantes \u2013 Streams
Alguns métodos relevantes
boolean canRead() /* Permissão de Leitura? */
2
boolean canWrite() /* Permissão de Escrita? */
4
/* Reconhece o tipo do arquivo */
6 boolean isFile()
boolean isDirectory()
8
renameTo() /* Renomeia o arquivo/diretório */
10
mkdir() /* Cria diretório */
12
String[] list() /* Lista o conteúdo do diretório */
14
File[] listFiles() /* Lista todos os arquivos do diretório */
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 390 / 527
Tópicos Relevantes \u2013 Streams
Exemplo java.io.File \u2013 Arquivo
1 File fileTexto = new File( "arquivoTexto.txt" );
System.out.println( "Nome do arquivo: " + fileTexto.getName() );
3 System.out.println( "O arquivo existe? " + fileTexto.exists() );
System.out.println( "E um diretorio? " + fileTexto.isDirectory() );
5 if ( fileTexto.isFile() ) {
System.out.println( "E um arquivo do diretorio: "
7 + fileTexto.getAbsolutePath() );
}
9 System.out.println( "Posso ler? " + fileTexto.canRead() );
System.out.println( "Posso escrever? " + fileTexto.canWrite() );
11 System.out.println( "Renomeou com sucesso? "
+ fileTexto.renameTo( new File( "renomeado.txt" ) ) );
Nome do arquivo: arquivoTexto.txt
O arquivo existe? true
É um diretório? false
É um arquivo do diretório: /Terra/apostilaJava/arquivoTexto.txt
Posso ler? true
Posso escrever? false
Renomeou com sucesso? true
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 391 / 527
Tópicos Relevantes \u2013 Streams
Exemplo java.io.File \u2013 Diretório
1 File fileDiretorio = new File( "streams" );
System.out.println( "Nome do arquivo: " + fileDiretorio.getName() );
3 System.out.println( "E um diretorio? " + fileDiretorio.isDirectory() );
5 File[] files = fileDiretorio.listFiles();
System.out.println( "Conteudo do diretorio:" );
7 for (File f : files){
System.out.println("\t" + f.getName());
9 }
Nome do arquivo: streams
É um diretório? true
Conteúdo do diretório:
ExemploDiretorio.class
ExemploDiretorio.java
ExemploFile.class
ExemploFile.java
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 392 / 527
Tópicos Relevantes \u2013 Streams
Tipos principais de streams
Texto
Binário
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 393 / 527
Tópicos Relevantes \u2013 Streams
Reader
Suas subclasses efetuam leitura textual
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 394 / 527
Tópicos Relevantes \u2013 Streams
Exemplo Reader
1 try {
File file = new File( "arquivoTexto.txt" );
3 Reader in = new FileReader( file );
LineNumberReader reader = new LineNumberReader( in );
5 while ( reader.ready() ) {
System.out.print( reader.getLineNumber() + ": " );
7 System.out.println( reader.readLine() );
}
9 reader.close();
in.close();
11 } catch (FileNotFoundException e) {
System.out.println( "Arq. nao existe. Causa: " + e.getMessage() );
13 } catch (IOException e) {
System.out.println( "Erro de E/S. Causa: " + e.getMessage() );
15 }
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 395 / 527
Tópicos Relevantes \u2013 Streams
Writer
Suas subclasses efetuam escrita textual
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 396 / 527
Tópicos Relevantes \u2013 Streams
Exemplo Writer
1 try {
File file = new File( "arquivoGravado.txt" );
3 FileWriter out = new FileWriter( file );
out.write( "Linguagem Java\n" );
5
PrintWriter writer = new PrintWriter( out );
7 writer.println( "Aprendendo Streams" );
writer.println( "Professor Ricardo Terra" );
9
writer.close();
11 out.close();
} catch (IOException e) {
13 System.out.println( "Erro de E/S. Causa: " + e.getMessage() );
}
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 397 / 527
Tópicos Relevantes \u2013 Streams
Um exemplo com Reader
A maioria das vezes quando lemos um arquivo em disco é
porque queremos extrair informações dele para serem
utilizadas pelo aplicativo
Vamos, por exemplo, considerar um arquivo texto em que:
na 1a linha existe números separados por tabulação (\u2018\t\u2019)
2 4 6 8 10
O programa deverá ler esses números, guardar em um
arranjo e depois imprimir a soma deles
No próximo slide demonstra como deve ser feito
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 398 / 527
Tópicos Relevantes \u2013 Streams
Exemplo Completo Reader
1 try {
File file = new File( "entrada.txt" );
3 Reader in = new FileReader( file );
LineNumberReader reader = new LineNumberReader( in );
5
if ( reader.ready() ) {
7 String[] numeros = reader.readLine().split( "\t" );
int[] array = new int[numeros.length];
9 for ( int i = 0; i < numeros.length; i++ ) {
array[i] = Integer.parseInt( numeros[i] );
11 }
int soma = 0;
13 for ( int numero : array ) {
soma += numero;
15 }
System.out.println( &quot;Soma: &quot; + soma );
17 }
19 reader.close();
in.close();
21 } catch ...
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 399 / 527
Tópicos Relevantes \u2013 Streams
InputStream
Suas subclasses efetuam leitura binária
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 400 / 527
Tópicos Relevantes \u2013 Streams
Exemplo InputStream
try {
2 final String zeros = &quot;00000000&quot;;
File file = new File( &quot;star.gif&quot; );
4 InputStream in = new FileInputStream( file );
int i = 0;
6 while ( (i = in.read()) != -1 ) {
String str = Integer.toBinaryString( i );
8 System.out.print( zeros.substring( str.length() ) + str );
}
10 in.close();
} catch (FileNotFoundException e) {
12 System.out.println( &quot;Arq. nao existe. Causa: &quot; + e.getMessage() );
} catch (IOException e) {
14 System.out.println( &quot;Erro de E/S. Causa: &quot; + e.getMessage() );
}
Ricardo Terra (rterrabh@gmail.com) POO 11 de