SlideShare uma empresa Scribd logo
Aula 23 – Arquivos e Exce¸c˜oes
Norton Trevisan Roman
29 de maio de 2020
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 1 / 38
Arquivos
Nossos programas tˆem um grande inconveniente
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 2 / 38
Arquivos
Nossos programas tˆem um grande inconveniente
Dados de configura¸c˜ao, que deveriam ser preservados,
precisam ser fornecidos a cada vez que o programa roda
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 2 / 38
Arquivos
Nossos programas tˆem um grande inconveniente
Dados de configura¸c˜ao, que deveriam ser preservados,
precisam ser fornecidos a cada vez que o programa roda
Como preserv´a-los
ent˜ao?
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 2 / 38
Arquivos
Nossos programas tˆem um grande inconveniente
Dados de configura¸c˜ao, que deveriam ser preservados,
precisam ser fornecidos a cada vez que o programa roda
Como preserv´a-los
ent˜ao?
Guardando em arquivos
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 2 / 38
Arquivos
Nossos programas tˆem um grande inconveniente
Dados de configura¸c˜ao, que deveriam ser preservados,
precisam ser fornecidos a cada vez que o programa roda
Como preserv´a-los
ent˜ao?
Guardando em arquivos
Em java h´a v´arios modos
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 2 / 38
Arquivos
Nossos programas tˆem um grande inconveniente
Dados de configura¸c˜ao, que deveriam ser preservados,
precisam ser fornecidos a cada vez que o programa roda
Como preserv´a-los
ent˜ao?
Guardando em arquivos
Em java h´a v´arios modos
Um modo ´e criar um
objeto File
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 2 / 38
Arquivos
Nossos programas tˆem um grande inconveniente
Dados de configura¸c˜ao, que deveriam ser preservados,
precisam ser fornecidos a cada vez que o programa roda
Como preserv´a-los
ent˜ao?
Guardando em arquivos
Em java h´a v´arios modos
Um modo ´e criar um
objeto File
import java.io.File;
class Projeto {
...
public boolean gravaArq(String nome) {
File arq = new File(nome);
...
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 2 / 38
Arquivos
Nossos programas tˆem um grande inconveniente
Dados de configura¸c˜ao, que deveriam ser preservados,
precisam ser fornecidos a cada vez que o programa roda
Como preserv´a-los
ent˜ao?
Guardando em arquivos
Em java h´a v´arios modos
Um modo ´e criar um
objeto File
import java.io.File;
class Projeto {
...
public boolean gravaArq(String nome) {
File arq = new File(nome);
...
}
}
Instˆancias da classe java.io.File representam caminhos
(paths) para poss´ıveis locais no sistema de arquivos
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 2 / 38
Arquivos
Apenas representam
um arquivo ou
diret´orio
import java.io.File;
class Projeto {
...
public boolean gravaArq(String nome) {
File arq = new File(nome);
...
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 3 / 38
Arquivos
Apenas representam
um arquivo ou
diret´orio
N˜ao necessariamente
o caminho existe
import java.io.File;
class Projeto {
...
public boolean gravaArq(String nome) {
File arq = new File(nome);
...
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 3 / 38
Arquivos
Apenas representam
um arquivo ou
diret´orio
N˜ao necessariamente
o caminho existe
N˜ao criam o arquivo
ou diret´orio
import java.io.File;
class Projeto {
...
public boolean gravaArq(String nome) {
File arq = new File(nome);
...
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 3 / 38
Arquivos
Mas isso s´o n˜ao basta
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 4 / 38
Arquivos
Mas isso s´o n˜ao basta
Temos que escrever o
string no arquivo
import java.io.File;
import java.io.FileWriter;
class Projeto {
...
public boolean gravaArq(String nome) {
File arq = new File(nome);
FileWriter writer =
new FileWriter(arq,false);
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 4 / 38
Arquivos
Mas isso s´o n˜ao basta
Temos que escrever o
string no arquivo
Mas onde?
import java.io.File;
import java.io.FileWriter;
class Projeto {
...
public boolean gravaArq(String nome) {
File arq = new File(nome);
FileWriter writer =
new FileWriter(arq,false);
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 4 / 38
Arquivos
Mas isso s´o n˜ao basta
Temos que escrever o
string no arquivo
Mas onde?
Ou no in´ıcio do arquivo
import java.io.File;
import java.io.FileWriter;
class Projeto {
...
public boolean gravaArq(String nome) {
File arq = new File(nome);
FileWriter writer =
new FileWriter(arq,false);
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 4 / 38
Arquivos
Mas isso s´o n˜ao basta
Temos que escrever o
string no arquivo
Mas onde?
Ou no in´ıcio do arquivo
Se j´a existir, ir´a
sobrescrever
import java.io.File;
import java.io.FileWriter;
class Projeto {
...
public boolean gravaArq(String nome) {
File arq = new File(nome);
FileWriter writer =
new FileWriter(arq,false);
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 4 / 38
Arquivos
Mas isso s´o n˜ao basta
Temos que escrever o
string no arquivo
Mas onde?
Ou no in´ıcio do arquivo
Se j´a existir, ir´a
sobrescrever
import java.io.File;
import java.io.FileWriter;
class Projeto {
...
public boolean gravaArq(String nome) {
File arq = new File(nome);
FileWriter writer =
new FileWriter(arq,true);
return(true);
}
}
Ou em seu final (append)
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 4 / 38
Arquivos
Mas isso s´o n˜ao basta
Temos que escrever o
string no arquivo
Mas onde?
Ou no in´ıcio do arquivo
Se j´a existir, ir´a
sobrescrever
import java.io.File;
import java.io.FileWriter;
class Projeto {
...
public boolean gravaArq(String nome) {
File arq = new File(nome);
FileWriter writer =
new FileWriter(arq,true);
return(true);
}
}
Ou em seu final (append)
Se n˜ao existir, ir´a criar
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 4 / 38
Arquivos
E...
import java.io.File;
import java.io.FileWriter;
class Projeto {
...
public boolean gravaArq(String nome) {
File arq = new File(nome);
FileWriter writer =
new FileWriter(arq,true);
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 5 / 38
Arquivos
E...
Sa´ıda
$javac Projeto.java
Projeto.java:52: unreported exception
java.io.IOException; must be caught
or declared to be thrown
FileWriter writer =
new FileWriter(arq,true);
^
1 error
import java.io.File;
import java.io.FileWriter;
class Projeto {
...
public boolean gravaArq(String nome) {
File arq = new File(nome);
FileWriter writer =
new FileWriter(arq,true);
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 5 / 38
Arquivos
E...
Sa´ıda
$javac Projeto.java
Projeto.java:52: unreported exception
java.io.IOException; must be caught
or declared to be thrown
FileWriter writer =
new FileWriter(arq,true);
^
1 error
import java.io.File;
import java.io.FileWriter;
class Projeto {
...
public boolean gravaArq(String nome) {
File arq = new File(nome);
FileWriter writer =
new FileWriter(arq,true);
return(true);
}
}
Capturada ou declarada como lan¸cada?
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 5 / 38
Exce¸c˜oes
Exce¸c˜oes s˜ao como o Java trata de seus erros.
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 6 / 38
Exce¸c˜oes
Exce¸c˜oes s˜ao como o Java trata de seus erros.
S˜ao objetos “lan¸cados” de um trecho de c´odigo
para fora do m´etodo em que ele est´a
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 6 / 38
Exce¸c˜oes
Exce¸c˜oes s˜ao como o Java trata de seus erros.
S˜ao objetos “lan¸cados” de um trecho de c´odigo
para fora do m´etodo em que ele est´a
M´etodos que fizeram chamada ao m´etodo
problem´atico podem
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 6 / 38
Exce¸c˜oes
Exce¸c˜oes s˜ao como o Java trata de seus erros.
S˜ao objetos “lan¸cados” de um trecho de c´odigo
para fora do m´etodo em que ele est´a
M´etodos que fizeram chamada ao m´etodo
problem´atico podem
Capturar e tratar a exce¸c˜ao
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 6 / 38
Exce¸c˜oes
Exce¸c˜oes s˜ao como o Java trata de seus erros.
S˜ao objetos “lan¸cados” de um trecho de c´odigo
para fora do m´etodo em que ele est´a
M´etodos que fizeram chamada ao m´etodo
problem´atico podem
Capturar e tratar a exce¸c˜ao
Pass´a-la adiante, para o m´etodo que os invocar
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 6 / 38
Exce¸c˜oes
Passando adiante a
batata quente:
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 7 / 38
Exce¸c˜oes
Passando adiante a
batata quente:
Basta adicionar
throws (e o tipo da
exce¸c˜ao repassada) na
assinatura do m´etodo
em que ela pode
ocorrer
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 7 / 38
Exce¸c˜oes
Passando adiante a
batata quente:
Basta adicionar
throws (e o tipo da
exce¸c˜ao repassada) na
assinatura do m´etodo
em que ela pode
ocorrer
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
class Projeto {
...
public boolean gravaArq(String nome)
throws IOException {
File arq = new File(nome);
FileWriter writer =
new FileWriter(arq,true);
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 7 / 38
Exce¸c˜oes
Passando adiante a
batata quente:
Basta adicionar
throws (e o tipo da
exce¸c˜ao repassada) na
assinatura do m´etodo
em que ela pode
ocorrer
O m´etodo que chamar
gravaArq que se vire
para trat´a-la, ou passe
adiante
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
class Projeto {
...
public boolean gravaArq(String nome)
throws IOException {
File arq = new File(nome);
FileWriter writer =
new FileWriter(arq,true);
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 7 / 38
Exce¸c˜oes
Capturando e Tratando
Exce¸c˜oes
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
class Projeto {
...
public boolean gravaArq(String nome) {
File arq = new File(nome);
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 8 / 38
Exce¸c˜oes
Capturando e Tratando
Exce¸c˜oes
Bloco Try – Catch –
Finally
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
class Projeto {
...
public boolean gravaArq(String nome) {
File arq = new File(nome);
try {
}
catch(IOException ioe) {
}
finally {
}
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 8 / 38
Exce¸c˜oes
Capturando e Tratando
Exce¸c˜oes
Bloco Try – Catch –
Finally
Try: Testa o comando
que pode gerar a exce¸c˜ao
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
class Projeto {
...
public boolean gravaArq(String nome) {
File arq = new File(nome);
try {
FileWriter writer =
new FileWriter(arq,true);
}
catch(IOException ioe) {
}
finally {
}
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 8 / 38
Exce¸c˜oes
Capturando e Tratando
Exce¸c˜oes
Bloco Try – Catch –
Finally
Try: Testa o comando
que pode gerar a exce¸c˜ao
Catch: Captura a
exce¸c˜ao, executando um
c´odigo que o programador
define para trat´a-la
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
class Projeto {
...
public boolean gravaArq(String nome) {
File arq = new File(nome);
try {
FileWriter writer =
new FileWriter(arq,true);
}
catch(IOException ioe) {
return(false);
}
finally {
}
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 8 / 38
Exce¸c˜oes
Finally (Opcional)
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
class Projeto {
...
public boolean gravaArq(String nome) {
File arq = new File(nome);
try {
FileWriter writer =
new FileWriter(arq,true);
}
catch(IOException ioe) {
return(false);
}
finally {// totalmente opcional
// Fazendo alguma limpeza
}
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 9 / 38
Exce¸c˜oes
Finally (Opcional)
O c´odigo dentro dele sempre
ser´a executado, mesmo se
houver uma exce¸c˜ao
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
class Projeto {
...
public boolean gravaArq(String nome) {
File arq = new File(nome);
try {
FileWriter writer =
new FileWriter(arq,true);
}
catch(IOException ioe) {
return(false);
}
finally {// totalmente opcional
// Fazendo alguma limpeza
}
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 9 / 38
Exce¸c˜oes
Finally (Opcional)
O c´odigo dentro dele sempre
ser´a executado, mesmo se
houver uma exce¸c˜ao
Se o c´odigo dentro do try
ou catch contiver um
return, o c´odigo dentro do
finally ser´a executado
antes do retorno do m´etodo
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
class Projeto {
...
public boolean gravaArq(String nome) {
File arq = new File(nome);
try {
FileWriter writer =
new FileWriter(arq,true);
}
catch(IOException ioe) {
return(false);
}
finally {// totalmente opcional
// Fazendo alguma limpeza
}
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 9 / 38
Exce¸c˜oes
E se nome for null?
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
class Projeto {
...
public boolean gravaArq(String nome) {
File arq = new File(nome);
try {
FileWriter writer =
new FileWriter(arq,true);
}
catch(IOException ioe) {
return(false);
}
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 10 / 38
Exce¸c˜oes
E se nome for null?
Ou testamos e retornamos
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
class Projeto {
...
public boolean gravaArq(String nome) {
if (nome == null) {
return(false);
}
File arq = new File(nome);
try {
FileWriter writer =
new FileWriter(arq,true);
}
catch(IOException ioe) {
return(false);
}
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 10 / 38
Exce¸c˜oes
E se nome for null?
Ou testamos e retornamos
Ou lan¸camos uma exce¸c˜ao
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
class Projeto {
...
public boolean gravaArq(String nome) {
if (nome == null) {
return(false);
}
File arq = new File(nome);
try {
FileWriter writer =
new FileWriter(arq,true);
}
catch(IOException ioe) {
return(false);
}
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 10 / 38
Exce¸c˜oes
E se nome for null?
Ou testamos e retornamos
Ou lan¸camos uma exce¸c˜ao
Como lan¸car?
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
class Projeto {
...
public boolean gravaArq(String nome) {
if (nome == null) {
return(false);
}
File arq = new File(nome);
try {
FileWriter writer =
new FileWriter(arq,true);
}
catch(IOException ioe) {
return(false);
}
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 10 / 38
Exce¸c˜oes
E se nome for null?
Ou testamos e retornamos
Ou lan¸camos uma exce¸c˜ao
Como lan¸car?
Criando um objeto da
exce¸c˜ao desejada
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
class Projeto {
...
public boolean gravaArq(String nome) {
if (nome == null) {
IOException ex = new
IOException("Par^ametro nulo");
}
File arq = new File(nome);
try {
FileWriter writer =
new FileWriter(arq,true);
}
catch(IOException ioe) {
return(false);
}
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 10 / 38
Exce¸c˜oes
E se nome for null?
Ou testamos e retornamos
Ou lan¸camos uma exce¸c˜ao
Como lan¸car?
Criando um objeto da
exce¸c˜ao desejada
E usando throw
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
class Projeto {
...
public boolean gravaArq(String nome) {
if (nome == null) {
IOException ex = new
IOException("Par^ametro nulo");
throw ex;
}
File arq = new File(nome);
try {
FileWriter writer =
new FileWriter(arq,true);
}
catch(IOException ioe) {
return(false);
}
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 10 / 38
Exce¸c˜oes
Sa´ıda
$ javac Projeto.java
Projeto.java:60: unreported exception
java.io.IOException; must be caught or
declared to be thrown
throw ex;
^
1 error
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
class Projeto {
...
public boolean gravaArq(String nome) {
if (nome == null) {
IOException ex = new
IOException("Par^ametro nulo");
throw ex;
}
File arq = new File(nome);
try {
FileWriter writer =
new FileWriter(arq,true);
}
catch(IOException ioe) {
return(false);
}
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 11 / 38
Exce¸c˜oes
Sa´ıda
$ javac Projeto.java
Projeto.java:60: unreported exception
java.io.IOException; must be caught or
declared to be thrown
throw ex;
^
1 error
Temos tamb´em que
declarar que o m´etodo
lan¸ca a exce¸c˜ao
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
class Projeto {
...
public boolean gravaArq(String nome)
throws IOException {
if (nome == null) {
IOException ex = new
IOException("Par^ametro nulo");
throw ex;
}
File arq = new File(nome);
try {
FileWriter writer =
new FileWriter(arq,true);
}
catch(IOException ioe) {
return(false);
}
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 11 / 38
Exce¸c˜oes
E o que acontece ao
fazermos:
class Projeto {
...
public static void main(String[] args)
{
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Projeto p = new Projeto();
p.adicionaRes(new Residencia(cr,
null));
p.adicionaRes(new Residencia(cq,
null));
p.gravaArq(null);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 12 / 38
Exce¸c˜oes
E o que acontece ao
fazermos:
Sa´ıda
$ javac Projeto.java
Projeto.java:86: unreported
exception java.io.IOException;
must be caught or declared to
be thrown
p.gravaArq(null);
^
1 error
class Projeto {
...
public static void main(String[] args)
{
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Projeto p = new Projeto();
p.adicionaRes(new Residencia(cr,
null));
p.adicionaRes(new Residencia(cq,
null));
p.gravaArq(null);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 12 / 38
Exce¸c˜oes
E o que acontece ao
fazermos:
Sa´ıda
$ javac Projeto.java
Projeto.java:86: unreported
exception java.io.IOException;
must be caught or declared to
be thrown
p.gravaArq(null);
^
1 error
Temos que adicionar o
bloco try ... catch
class Projeto {
...
public static void main(String[] args)
{
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Projeto p = new Projeto();
p.adicionaRes(new Residencia(cr,
null));
p.adicionaRes(new Residencia(cq,
null));
try {
p.gravaArq(null);
}
catch (IOException ioe) {
System.out.println(
ioe.getMessage());
}
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 12 / 38
Exce¸c˜oes
E agora?
class Projeto {
...
public static void main(String[] args)
{
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Projeto p = new Projeto();
p.adicionaRes(new Residencia(cr,
null));
p.adicionaRes(new Residencia(cq,
null));
try {
p.gravaArq(null);
}
catch (IOException ioe) {
System.out.println(
ioe.getMessage());
}
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 13 / 38
Exce¸c˜oes
E agora?
Sa´ıda
$ java Projeto
Par^ametro nulo
class Projeto {
...
public static void main(String[] args)
{
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Projeto p = new Projeto();
p.adicionaRes(new Residencia(cr,
null));
p.adicionaRes(new Residencia(cq,
null));
try {
p.gravaArq(null);
}
catch (IOException ioe) {
System.out.println(
ioe.getMessage());
}
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 13 / 38
Exce¸c˜oes
E se IOException
n˜ao for a ideal?
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 14 / 38
Exce¸c˜oes
E se IOException
n˜ao for a ideal?
E se n˜ao houver
ideal?
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 14 / 38
Exce¸c˜oes
E se IOException
n˜ao for a ideal?
E se n˜ao houver
ideal?
Cria-se uma exce¸c˜ao,
subclasse de
Exception (ou de
qualquer outra
exce¸c˜ao)
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 14 / 38
Exce¸c˜oes
E se IOException
n˜ao for a ideal?
E se n˜ao houver
ideal?
Cria-se uma exce¸c˜ao,
subclasse de
Exception (ou de
qualquer outra
exce¸c˜ao)
class MinhaExcecao extends Exception
{
public MinhaExcecao() {}
public MinhaExcecao(String msg){
super(msg);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 14 / 38
Exce¸c˜oes
Usamos essa exce¸c˜ao
como qualquer outra
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 15 / 38
Exce¸c˜oes
Usamos essa exce¸c˜ao
como qualquer outra
class Projeto {
...
public boolean gravaArq(String nome)
throws MinhaExcecao {
if (nome == null) {
MinhaExcecao ex = new
MinhaExcecao("Par^ametro nulo");
throw ex;
}
File arq = new File(nome);
try {
FileWriter writer = new
FileWriter(arq,true);
}
catch(IOException ioe) {
return(false);
}
return(true);
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 15 / 38
Exce¸c˜oes – Pilha de Chamadas
O que acontece quando alguem lan¸ca uma exce¸c˜ao?
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 16 / 38
Exce¸c˜oes – Pilha de Chamadas
O que acontece quando alguem lan¸ca uma exce¸c˜ao?
`A medida em que m´etodos
s˜ao chamados dentro de
outros m´etodos, o JRE
armazena todos eles em
uma estrutura chamada
Pilha de Chamadas
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 16 / 38
Exce¸c˜oes – Pilha de Chamadas
O que acontece quando alguem lan¸ca uma exce¸c˜ao?
`A medida em que m´etodos
s˜ao chamados dentro de
outros m´etodos, o JRE
armazena todos eles em
uma estrutura chamada
Pilha de Chamadas
Se um determinado
m´etodo lan¸ca uma
exce¸c˜ao, o JRE busca seu
tratamento na pilha, indo desde o m´etodo que chamou o
m´etodo que lan¸cou a exce¸c˜ao, at´e atingir main, se nenhum
m´etodo no caminho tratar da exce¸c˜ao.
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 16 / 38
Pilha de Chamadas
Chamada
Busca por tratamento da
Exce¸c˜ao
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 17 / 38
Arquivos
E como podemos ver
a pilha de execu¸c˜ao?
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 18 / 38
Arquivos
E como podemos ver
a pilha de execu¸c˜ao?
printStackTrace
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Projeto p = new Projeto();
p.adicionaRes(new Residencia(cr, null));
p.adicionaRes(new Residencia(cq, null));
try {
p.gravaArq(null);
}
catch (IOException ioe) {
ioe.printStackTrace();
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 18 / 38
Arquivos
E como podemos ver
a pilha de execu¸c˜ao?
printStackTrace
A existˆencia de
m´ultiplas exce¸c˜oes
abre para a
possibilidade de
m´ultiplos blocos
catch.
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Projeto p = new Projeto();
p.adicionaRes(new Residencia(cr, null));
p.adicionaRes(new Residencia(cq, null));
try {
p.gravaArq(null);
}
catch (IOException ioe) {
ioe.printStackTrace();
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 18 / 38
Arquivos
Criamos um para cada
tipo de exce¸c˜ao
tratada
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Projeto p = new Projeto();
p.adicionaRes(new Residencia(cr, null));
p.adicionaRes(new Residencia(cq, null));
try {
p.gravaArq(null);
}
catch (IOException ioe) {
ioe.printStackTrace();
}
catch (MinhaExcecao me) {
System.out.println(me.getMessage());
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 19 / 38
Arquivos
Criamos um para cada
tipo de exce¸c˜ao
tratada
Com c´odigo espec´ıfico
para cada exce¸c˜ao
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Projeto p = new Projeto();
p.adicionaRes(new Residencia(cr, null));
p.adicionaRes(new Residencia(cq, null));
try {
p.gravaArq(null);
}
catch (IOException ioe) {
ioe.printStackTrace();
}
catch (MinhaExcecao me) {
System.out.println(me.getMessage());
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 19 / 38
Arquivos
Criamos um para cada
tipo de exce¸c˜ao
tratada
Com c´odigo espec´ıfico
para cada exce¸c˜ao
Nos permite tomar
decis˜oes diferentes
conforme o tipo de
erro encontrado.
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Projeto p = new Projeto();
p.adicionaRes(new Residencia(cr, null));
p.adicionaRes(new Residencia(cq, null));
try {
p.gravaArq(null);
}
catch (IOException ioe) {
ioe.printStackTrace();
}
catch (MinhaExcecao me) {
System.out.println(me.getMessage());
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 19 / 38
Algumas Exce¸c˜oes
int x = Integer.parseInt("five");
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 20 / 38
Algumas Exce¸c˜oes
int x = Integer.parseInt("five");
java.lang.NumberFormatException
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 20 / 38
Algumas Exce¸c˜oes
int x = Integer.parseInt("five");
java.lang.NumberFormatException
int[] y = {1, 3};
System.out.println(y[3]);
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 20 / 38
Algumas Exce¸c˜oes
int x = Integer.parseInt("five");
java.lang.NumberFormatException
int[] y = {1, 3};
System.out.println(y[3]);
java.lang.ArrayIndexOutOfBoundsException
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 20 / 38
Algumas Exce¸c˜oes
int x = Integer.parseInt("five");
java.lang.NumberFormatException
int[] y = {1, 3};
System.out.println(y[3]);
java.lang.ArrayIndexOutOfBoundsException
int[] z = {1, 3};
z[-1] = 2;
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 20 / 38
Algumas Exce¸c˜oes
int x = Integer.parseInt("five");
java.lang.NumberFormatException
int[] y = {1, 3};
System.out.println(y[3]);
java.lang.ArrayIndexOutOfBoundsException
int[] z = {1, 3};
z[-1] = 2;
java.lang.ArrayIndexOutOfBoundsException
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 20 / 38
Algumas Exce¸c˜oes
int x = Integer.parseInt("five");
java.lang.NumberFormatException
int[] y = {1, 3};
System.out.println(y[3]);
java.lang.ArrayIndexOutOfBoundsException
int[] z = {1, 3};
z[-1] = 2;
java.lang.ArrayIndexOutOfBoundsException
int w = 10 / 0;
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 20 / 38
Algumas Exce¸c˜oes
int x = Integer.parseInt("five");
java.lang.NumberFormatException
int[] y = {1, 3};
System.out.println(y[3]);
java.lang.ArrayIndexOutOfBoundsException
int[] z = {1, 3};
z[-1] = 2;
java.lang.ArrayIndexOutOfBoundsException
int w = 10 / 0;
java.lang.ArithmeticException
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 20 / 38
Algumas Exce¸c˜oes
int x = Integer.parseInt("five");
java.lang.NumberFormatException
int[] y = {1, 3};
System.out.println(y[3]);
java.lang.ArrayIndexOutOfBoundsException
int[] z = {1, 3};
z[-1] = 2;
java.lang.ArrayIndexOutOfBoundsException
int w = 10 / 0;
java.lang.ArithmeticException
class Aula23 {
public static void main(String[] args)
{
try {
int w = 10 / 0;
}
catch(Exception e) {
}
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 20 / 38
Algumas Exce¸c˜oes
int x = Integer.parseInt("five");
java.lang.NumberFormatException
int[] y = {1, 3};
System.out.println(y[3]);
java.lang.ArrayIndexOutOfBoundsException
int[] z = {1, 3};
z[-1] = 2;
java.lang.ArrayIndexOutOfBoundsException
int w = 10 / 0;
java.lang.ArithmeticException
class Aula23 {
public static void main(String[] args)
{
try {
int w = 10 / 0;
}
catch(Exception e) {
e.printStackTrace();
}
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 20 / 38
Algumas Exce¸c˜oes
int x = Integer.parseInt("five");
java.lang.NumberFormatException
int[] y = {1, 3};
System.out.println(y[3]);
java.lang.ArrayIndexOutOfBoundsException
int[] z = {1, 3};
z[-1] = 2;
java.lang.ArrayIndexOutOfBoundsException
int w = 10 / 0;
java.lang.ArithmeticException
class Aula23 {
public static void main(String[] args)
{
try {
int w = 10 / 0;
}
catch(Exception e) {
e.printStackTrace();
}
}
}
Sa´ıda
$ java Aula23
java.lang.ArithmeticException: / by zero
at Aula23.main(Aula23.java:5)
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 20 / 38
Por fim...
Assim como podemos capturar m´ultiplas exce¸c˜oes,
tamb´em podemos repass´a-las
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 21 / 38
Por fim...
Assim como podemos capturar m´ultiplas exce¸c˜oes,
tamb´em podemos repass´a-las
Ex:
public boolean gravaArq(String nome) throws
MinhaExcecao, IOException {...}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 21 / 38
Checked × Unchecked
H´a dois tipos b´asicos de exce¸c˜ao
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 22 / 38
Checked × Unchecked
H´a dois tipos b´asicos de exce¸c˜ao
Checked:
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 22 / 38
Checked × Unchecked
H´a dois tipos b´asicos de exce¸c˜ao
Checked:
Devem ser explicitamente capturadas ou propagadas
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 22 / 38
Checked × Unchecked
H´a dois tipos b´asicos de exce¸c˜ao
Checked:
Devem ser explicitamente capturadas ou propagadas
Estendem java.lang.Exception
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 22 / 38
Checked × Unchecked
H´a dois tipos b´asicos de exce¸c˜ao
Checked:
Devem ser explicitamente capturadas ou propagadas
Estendem java.lang.Exception
Unchecked (ou Run-Time):
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 22 / 38
Checked × Unchecked
H´a dois tipos b´asicos de exce¸c˜ao
Checked:
Devem ser explicitamente capturadas ou propagadas
Estendem java.lang.Exception
Unchecked (ou Run-Time):
N˜ao precisam ser capturadas ou propagadas
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 22 / 38
Checked × Unchecked
H´a dois tipos b´asicos de exce¸c˜ao
Checked:
Devem ser explicitamente capturadas ou propagadas
Estendem java.lang.Exception
Unchecked (ou Run-Time):
N˜ao precisam ser capturadas ou propagadas
Passam “despercebidas” pelo compilador
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 22 / 38
Checked × Unchecked
H´a dois tipos b´asicos de exce¸c˜ao
Checked:
Devem ser explicitamente capturadas ou propagadas
Estendem java.lang.Exception
Unchecked (ou Run-Time):
N˜ao precisam ser capturadas ou propagadas
Passam “despercebidas” pelo compilador
O programador s´o descobre que elas existem quando h´a um
erro que p´ara o programa
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 22 / 38
Checked × Unchecked
H´a dois tipos b´asicos de exce¸c˜ao
Checked:
Devem ser explicitamente capturadas ou propagadas
Estendem java.lang.Exception
Unchecked (ou Run-Time):
N˜ao precisam ser capturadas ou propagadas
Passam “despercebidas” pelo compilador
O programador s´o descobre que elas existem quando h´a um
erro que p´ara o programa
Estendem java.lang.RuntimeException
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 22 / 38
Checked × Unchecked
H´a dois tipos b´asicos de exce¸c˜ao
Checked:
Devem ser explicitamente capturadas ou propagadas
Estendem java.lang.Exception
Unchecked (ou Run-Time):
N˜ao precisam ser capturadas ou propagadas
Passam “despercebidas” pelo compilador
O programador s´o descobre que elas existem quando h´a um
erro que p´ara o programa
Estendem java.lang.RuntimeException
MUITO CUIDADO COM ESSAS!
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 22 / 38
Arquivos
Voltemos ao c´odigo.
public boolean gravaArq(String nome) {
if (nome == null) return(false);
File arq = new File(nome);
try {
FileWriter writer = new
FileWriter(arq,false);
}
catch(IOException ioe) { return(false); }
return(true);
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 23 / 38
Arquivos
Voltemos ao c´odigo.
Por simplicidade,
retornamos false
no caso de nome ==
null
public boolean gravaArq(String nome) {
if (nome == null) return(false);
File arq = new File(nome);
try {
FileWriter writer = new
FileWriter(arq,false);
}
catch(IOException ioe) { return(false); }
return(true);
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 23 / 38
Arquivos
Voltemos ao c´odigo.
Por simplicidade,
retornamos false
no caso de nome ==
null
O que isso faz?
public boolean gravaArq(String nome) {
if (nome == null) return(false);
File arq = new File(nome);
try {
FileWriter writer = new
FileWriter(arq,false);
}
catch(IOException ioe) { return(false); }
return(true);
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 23 / 38
Arquivos
Voltemos ao c´odigo.
Por simplicidade,
retornamos false
no caso de nome ==
null
O que isso faz?
Cria um arquivo de
nome nome
public boolean gravaArq(String nome) {
if (nome == null) return(false);
File arq = new File(nome);
try {
FileWriter writer = new
FileWriter(arq,false);
}
catch(IOException ioe) { return(false); }
return(true);
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 23 / 38
Arquivos
Voltemos ao c´odigo.
Por simplicidade,
retornamos false
no caso de nome ==
null
O que isso faz?
Cria um arquivo de
nome nome
Se j´a existir,
sobrescreve
public boolean gravaArq(String nome) {
if (nome == null) return(false);
File arq = new File(nome);
try {
FileWriter writer = new
FileWriter(arq,false);
}
catch(IOException ioe) { return(false); }
return(true);
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 23 / 38
Arquivos
Falta gravar as
informa¸c˜oes
relevantes l´a
public boolean gravaArq(String nome) {
if (nome == null) return(false);
File arq = new File(nome);
try {
FileWriter writer = new
FileWriter(arq,false);
}
catch(IOException ioe) { return(false); }
return(true);
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 24 / 38
Arquivos
Falta gravar as
informa¸c˜oes
relevantes l´a
No caso, a ´area da
casa e da piscina
public boolean gravaArq(String nome) {
if (nome == null) return(false);
File arq = new File(nome);
try {
FileWriter writer = new
FileWriter(arq,false);
No p = this.condominio.getCabeca();
while (p != null) {
Residencia r = p.getRes();
if (r.casa != null) {
writer.write("Casa:´Area:" +
r.casa.area()+"n");
}
if (r.piscina != null) {
writer.write("Piscina:´Area:" +
r.piscina.area()+"n");
}
p = p.getProx();
}
}
catch(IOException ioe) { return(false); }
return(true);
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 24 / 38
Arquivos
Falta gravar as
informa¸c˜oes
relevantes l´a
No caso, a ´area da
casa e da piscina
Repare nos n
public boolean gravaArq(String nome) {
if (nome == null) return(false);
File arq = new File(nome);
try {
FileWriter writer = new
FileWriter(arq,false);
No p = this.condominio.getCabeca();
while (p != null) {
Residencia r = p.getRes();
if (r.casa != null) {
writer.write("Casa:´Area:" +
r.casa.area()+"n");
}
if (r.piscina != null) {
writer.write("Piscina:´Area:" +
r.piscina.area()+"n");
}
p = p.getProx();
}
}
catch(IOException ioe) { return(false); }
return(true);
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 24 / 38
Arquivos
Falta gravar as
informa¸c˜oes
relevantes l´a
No caso, a ´area da
casa e da piscina
Repare nos n
E fechar o arquivo
(impedindo novas
grava¸c˜oes)
public boolean gravaArq(String nome) {
if (nome == null) return(false);
File arq = new File(nome);
try {
FileWriter writer = new
FileWriter(arq,false);
No p = this.condominio.getCabeca();
while (p != null) {
Residencia r = p.getRes();
if (r.casa != null) {
writer.write("Casa:´Area:" +
r.casa.area()+"n");
}
if (r.piscina != null) {
writer.write("Piscina:´Area:" +
r.piscina.area()+"n");
}
p = p.getProx();
}
writer.close();
}
catch(IOException ioe) { return(false); }
return(true);
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 24 / 38
Arquivos
E como usamos isso?
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 25 / 38
Arquivos
E como usamos isso?
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Projeto p = new Projeto();
p.adicionaRes(new Residencia(cr, null));
p.adicionaRes(new Residencia(cq, null));
if (!p.gravaArq("oba"))
System.out.println("Problema");
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 25 / 38
Arquivos
Vimos como
escrevemos em um
arquivo.
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 26 / 38
Arquivos
Vimos como
escrevemos em um
arquivo.
Mas, e como lemos de
um arquivo?
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 26 / 38
Arquivos
Vimos como
escrevemos em um
arquivo.
Mas, e como lemos de
um arquivo?
Com Scanner
import java.util.Scanner;
import java.io.FileNotFoundException;
...
public static void main(String[] args) {
try {
File arq = new File("oba");
Scanner sc = new Scanner(arq);
while (sc.hasNext()) {
System.out.println(sc.next());
}
sc.close();
}
catch (FileNotFoundException fnfe) {
System.out.println(fnfe.getMessage());
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 26 / 38
Arquivos
Vimos como
escrevemos em um
arquivo.
Mas, e como lemos de
um arquivo?
Com Scanner
Teremos que capturar
exce¸c˜ao
import java.util.Scanner;
import java.io.FileNotFoundException;
...
public static void main(String[] args) {
try {
File arq = new File("oba");
Scanner sc = new Scanner(arq);
while (sc.hasNext()) {
System.out.println(sc.next());
}
sc.close();
}
catch (FileNotFoundException fnfe) {
System.out.println(fnfe.getMessage());
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 26 / 38
Arquivos
Scanner quebra os
s´ımbolos usando como
delimitador o espa¸co
import java.util.Scanner;
import java.io.FileNotFoundException;
...
public static void main(String[] args) {
try {
File arq = new File("oba");
Scanner sc = new Scanner(arq);
while (sc.hasNext()) {
System.out.println(sc.next());
}
sc.close();
}
catch (FileNotFoundException fnfe) {
System.out.println(fnfe.getMessage());
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 27 / 38
Arquivos
Scanner quebra os
s´ımbolos usando como
delimitador o espa¸co
E como ler a linha
inteira?
import java.util.Scanner;
import java.io.FileNotFoundException;
...
public static void main(String[] args) {
try {
File arq = new File("oba");
Scanner sc = new Scanner(arq);
while (sc.hasNext()) {
System.out.println(sc.next());
}
sc.close();
}
catch (FileNotFoundException fnfe) {
System.out.println(fnfe.getMessage());
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 27 / 38
Arquivos
Scanner quebra os
s´ımbolos usando como
delimitador o espa¸co
E como ler a linha
inteira?
Com nextLine()
import java.util.Scanner;
import java.io.FileNotFoundException;
...
public static void main(String[] args) {
try {
File arq = new File("oba");
Scanner sc = new Scanner(arq);
while (sc.hasNext()) {
System.out.println(sc.nextLine());
}
sc.close();
}
catch (FileNotFoundException fnfe) {
System.out.println(fnfe.getMessage());
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 27 / 38
Arquivos – Um exemplo mais complexo
Encriptar o conte´udo
de um arquivo oba,
contendo:
teste1
teste2 teste3
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 28 / 38
Arquivos – Um exemplo mais complexo
Encriptar o conte´udo
de um arquivo oba,
contendo:
teste1
teste2 teste3
Como fazer?
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 28 / 38
Arquivos – Um exemplo mais complexo
Encriptar o conte´udo
de um arquivo oba,
contendo:
teste1
teste2 teste3
Como fazer?
import java.io.File;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
public class Encriptador {
public static void main(String[] args){
...
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 28 / 38
Arquivos – Um exemplo mais complexo
Encriptar o conte´udo
de um arquivo oba,
contendo:
teste1
teste2 teste3
Como fazer?
Usamos as classes
espec´ıficas para lidar com
bytes de dados
import java.io.File;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
public class Encriptador {
public static void main(String[] args){
...
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 28 / 38
Arquivos – Um exemplo mais complexo
public static void main(String[] args) {
File arq = new File("oba");
File arq2 = new File("oba2");
try {
FileOutputStream writer = new
FileOutputStream(arq2,false);
FileInputStream reader =
new FileInputStream(arq);
int b;
while ((b = reader.read()) != -1) {
b = ~b;
writer.write(b);
}
writer.close();
reader.close();
arq.delete();
arq2.renameTo(arq);
}
catch(IOException ioe) {
System.out.println(ioe.getMessage());
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 29 / 38
Arquivos – Um exemplo mais complexo
Criamos um novo arquivo,
oba2
public static void main(String[] args) {
File arq = new File("oba");
File arq2 = new File("oba2");
try {
FileOutputStream writer = new
FileOutputStream(arq2,false);
FileInputStream reader =
new FileInputStream(arq);
int b;
while ((b = reader.read()) != -1) {
b = ~b;
writer.write(b);
}
writer.close();
reader.close();
arq.delete();
arq2.renameTo(arq);
}
catch(IOException ioe) {
System.out.println(ioe.getMessage());
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 29 / 38
Arquivos – Um exemplo mais complexo
Criamos um novo arquivo,
oba2
Lemos cada linha do
antigo
public static void main(String[] args) {
File arq = new File("oba");
File arq2 = new File("oba2");
try {
FileOutputStream writer = new
FileOutputStream(arq2,false);
FileInputStream reader =
new FileInputStream(arq);
int b;
while ((b = reader.read()) != -1) {
b = ~b;
writer.write(b);
}
writer.close();
reader.close();
arq.delete();
arq2.renameTo(arq);
}
catch(IOException ioe) {
System.out.println(ioe.getMessage());
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 29 / 38
Arquivos – Um exemplo mais complexo
Criamos um novo arquivo,
oba2
Lemos cada linha do
antigo
read retorna -1 ao final do
arquivo
public static void main(String[] args) {
File arq = new File("oba");
File arq2 = new File("oba2");
try {
FileOutputStream writer = new
FileOutputStream(arq2,false);
FileInputStream reader =
new FileInputStream(arq);
int b;
while ((b = reader.read()) != -1) {
b = ~b;
writer.write(b);
}
writer.close();
reader.close();
arq.delete();
arq2.renameTo(arq);
}
catch(IOException ioe) {
System.out.println(ioe.getMessage());
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 29 / 38
Arquivos – Um exemplo mais complexo
Criamos um novo arquivo,
oba2
Lemos cada linha do
antigo
read retorna -1 ao final do
arquivo
Encriptamos
public static void main(String[] args) {
File arq = new File("oba");
File arq2 = new File("oba2");
try {
FileOutputStream writer = new
FileOutputStream(arq2,false);
FileInputStream reader =
new FileInputStream(arq);
int b;
while ((b = reader.read()) != -1) {
b = ~b;
writer.write(b);
}
writer.close();
reader.close();
arq.delete();
arq2.renameTo(arq);
}
catch(IOException ioe) {
System.out.println(ioe.getMessage());
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 29 / 38
Arquivos – Um exemplo mais complexo
Criamos um novo arquivo,
oba2
Lemos cada linha do
antigo
read retorna -1 ao final do
arquivo
Encriptamos
Gravamos no novo arquivo
public static void main(String[] args) {
File arq = new File("oba");
File arq2 = new File("oba2");
try {
FileOutputStream writer = new
FileOutputStream(arq2,false);
FileInputStream reader =
new FileInputStream(arq);
int b;
while ((b = reader.read()) != -1) {
b = ~b;
writer.write(b);
}
writer.close();
reader.close();
arq.delete();
arq2.renameTo(arq);
}
catch(IOException ioe) {
System.out.println(ioe.getMessage());
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 29 / 38
Arquivos – Um exemplo mais complexo
Criamos um novo arquivo,
oba2
Lemos cada linha do
antigo
read retorna -1 ao final do
arquivo
Encriptamos
Gravamos no novo arquivo
Apagamos o antigo
public static void main(String[] args) {
File arq = new File("oba");
File arq2 = new File("oba2");
try {
FileOutputStream writer = new
FileOutputStream(arq2,false);
FileInputStream reader =
new FileInputStream(arq);
int b;
while ((b = reader.read()) != -1) {
b = ~b;
writer.write(b);
}
writer.close();
reader.close();
arq.delete();
arq2.renameTo(arq);
}
catch(IOException ioe) {
System.out.println(ioe.getMessage());
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 29 / 38
Arquivos – Um exemplo mais complexo
Criamos um novo arquivo,
oba2
Lemos cada linha do
antigo
read retorna -1 ao final do
arquivo
Encriptamos
Gravamos no novo arquivo
Apagamos o antigo
Substituimos pelo novo
public static void main(String[] args) {
File arq = new File("oba");
File arq2 = new File("oba2");
try {
FileOutputStream writer = new
FileOutputStream(arq2,false);
FileInputStream reader =
new FileInputStream(arq);
int b;
while ((b = reader.read()) != -1) {
b = ~b;
writer.write(b);
}
writer.close();
reader.close();
arq.delete();
arq2.renameTo(arq);
}
catch(IOException ioe) {
System.out.println(ioe.getMessage());
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 29 / 38
Arquivos – Um exemplo mais complexo
E como encriptamos?
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 30 / 38
Arquivos – Um exemplo mais complexo
E como encriptamos?
Da maneira mais simples:
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 30 / 38
Arquivos – Um exemplo mais complexo
E como encriptamos?
Da maneira mais simples:
Invertendo os bits do byte lido
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 30 / 38
Arquivos – Um exemplo mais complexo
E como encriptamos?
Da maneira mais simples:
Invertendo os bits do byte lido
˜ Corresponde a um n˜ao bit a bit
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 30 / 38
Arquivos – Um exemplo mais complexo
E como encriptamos?
Da maneira mais simples:
Invertendo os bits do byte lido
˜ Corresponde a um n˜ao bit a bit
Os bits da vari´avel s˜ao analisados individualmente
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 30 / 38
Arquivos – Um exemplo mais complexo
E como encriptamos?
Da maneira mais simples:
Invertendo os bits do byte lido
˜ Corresponde a um n˜ao bit a bit
Os bits da vari´avel s˜ao analisados individualmente
Bit 1 vira 0 e bit 0 vira 1
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 30 / 38
Arquivos – Um exemplo mais complexo
Ex:
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 31 / 38
Arquivos – Um exemplo mais complexo
Ex:
˜11001010 → 00110101
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 31 / 38
Arquivos – Um exemplo mais complexo
Ex:
˜11001010 → 00110101
˜00110101 → 11001010
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 31 / 38
Arquivos – Um exemplo mais complexo
Ex:
˜11001010 → 00110101
˜00110101 → 11001010
Essa caracter´ıstica (reversibilidade) ´e o que o torna
´util ao nosso prop´osito
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 31 / 38
Arquivos – Um exemplo mais complexo
E qual a sa´ıda de nosso
c´odigo?
public static void main(String[] args) {
File arq = new File("oba");
File arq2 = new File("oba2");
try {
FileOutputStream writer = new
FileOutputStream(arq2,false);
FileInputStream reader =
new FileInputStream(arq);
int b;
while ((b = reader.read()) != -1) {
b = ~b;
writer.write(b);
}
writer.close();
reader.close();
arq.delete();
arq2.renameTo(arq);
}
catch(IOException ioe) {
System.out.println(ioe.getMessage());
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 32 / 38
Arquivos – Um exemplo mais complexo
E qual a sa´ıda de nosso
c´odigo?
Sa´ıda
$ cat oba
teste1
teste2 teste3
$ java Encriptador
$ cat oba
$ java Encriptador
$ cat oba
teste1
teste2 teste3
public static void main(String[] args) {
File arq = new File("oba");
File arq2 = new File("oba2");
try {
FileOutputStream writer = new
FileOutputStream(arq2,false);
FileInputStream reader =
new FileInputStream(arq);
int b;
while ((b = reader.read()) != -1) {
b = ~b;
writer.write(b);
}
writer.close();
reader.close();
arq.delete();
arq2.renameTo(arq);
}
catch(IOException ioe) {
System.out.println(ioe.getMessage());
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 32 / 38
Arquivos – Um exemplo mais complexo
E qual a sa´ıda de nosso
c´odigo?
Sa´ıda
$ cat oba
teste1
teste2 teste3
$ java Encriptador
$ cat oba
$ java Encriptador
$ cat oba
teste1
teste2 teste3
Note que o mesmo
c´odigo que encripta,
tamb´em decripta
public static void main(String[] args) {
File arq = new File("oba");
File arq2 = new File("oba2");
try {
FileOutputStream writer = new
FileOutputStream(arq2,false);
FileInputStream reader =
new FileInputStream(arq);
int b;
while ((b = reader.read()) != -1) {
b = ~b;
writer.write(b);
}
writer.close();
reader.close();
arq.delete();
arq2.renameTo(arq);
}
catch(IOException ioe) {
System.out.println(ioe.getMessage());
}
}
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 32 / 38
Operadores Bit a Bit
Aplicam-se a inteiros (int, long, char, byte)
Operador A¸c˜ao Exemplo
not ~11001010
˜ inverte bits 00110101
and 11001010
& filtra bits & 01100110
01000010
or 11001010
| “liga” bits | 01100010
11101010
xor 11001010
ˆ ou exclusivo ^ 01100010
“desliga” bits 10101000
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 33 / 38
Ou Exclusivo
Verdadeiro se ou uma das condi¸c˜oes ´e verdadeira ou
a outra ´e, nunca as duas ou nenhuma delas
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 34 / 38
Ou Exclusivo
Verdadeiro se ou uma das condi¸c˜oes ´e verdadeira ou
a outra ´e, nunca as duas ou nenhuma delas
XOr: Comando1 ser´a executado?
if ((condi¸c~ao1 || condi¸c~ao2)
&&
!(condi¸c~ao1 && condi¸c~ao2))
comando1;
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 34 / 38
Ou Exclusivo
Verdadeiro se ou uma das condi¸c˜oes ´e verdadeira ou
a outra ´e, nunca as duas ou nenhuma delas
XOr: Comando1 ser´a executado?
condi¸c˜ao2
condi¸c˜ao1
V
V
if ((condi¸c~ao1 || condi¸c~ao2)
&&
!(condi¸c~ao1 && condi¸c~ao2))
comando1;
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 34 / 38
Ou Exclusivo
Verdadeiro se ou uma das condi¸c˜oes ´e verdadeira ou
a outra ´e, nunca as duas ou nenhuma delas
XOr: Comando1 ser´a executado?
condi¸c˜ao2
condi¸c˜ao1
V
V F
if ((condi¸c~ao1 || condi¸c~ao2)
&&
!(condi¸c~ao1 && condi¸c~ao2))
comando1;
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 34 / 38
Ou Exclusivo
Verdadeiro se ou uma das condi¸c˜oes ´e verdadeira ou
a outra ´e, nunca as duas ou nenhuma delas
XOr: Comando1 ser´a executado?
condi¸c˜ao2
condi¸c˜ao1
V F
V F
if ((condi¸c~ao1 || condi¸c~ao2)
&&
!(condi¸c~ao1 && condi¸c~ao2))
comando1;
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 34 / 38
Ou Exclusivo
Verdadeiro se ou uma das condi¸c˜oes ´e verdadeira ou
a outra ´e, nunca as duas ou nenhuma delas
XOr: Comando1 ser´a executado?
condi¸c˜ao2
condi¸c˜ao1
V F
V F V
if ((condi¸c~ao1 || condi¸c~ao2)
&&
!(condi¸c~ao1 && condi¸c~ao2))
comando1;
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 34 / 38
Ou Exclusivo
Verdadeiro se ou uma das condi¸c˜oes ´e verdadeira ou
a outra ´e, nunca as duas ou nenhuma delas
XOr: Comando1 ser´a executado?
condi¸c˜ao2
condi¸c˜ao1
V F
V F V
F
if ((condi¸c~ao1 || condi¸c~ao2)
&&
!(condi¸c~ao1 && condi¸c~ao2))
comando1;
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 34 / 38
Ou Exclusivo
Verdadeiro se ou uma das condi¸c˜oes ´e verdadeira ou
a outra ´e, nunca as duas ou nenhuma delas
XOr: Comando1 ser´a executado?
condi¸c˜ao2
condi¸c˜ao1
V F
V F V
F V
if ((condi¸c~ao1 || condi¸c~ao2)
&&
!(condi¸c~ao1 && condi¸c~ao2))
comando1;
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 34 / 38
Ou Exclusivo
Verdadeiro se ou uma das condi¸c˜oes ´e verdadeira ou
a outra ´e, nunca as duas ou nenhuma delas
XOr: Comando1 ser´a executado?
condi¸c˜ao2
condi¸c˜ao1
V F
V F V
F V F
if ((condi¸c~ao1 || condi¸c~ao2)
&&
!(condi¸c~ao1 && condi¸c~ao2))
comando1;
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 34 / 38
Arquivos
Aten¸c˜ao!
Nessa aula n˜ao discutimos sobre arquivos que
contˆem todo o leque de caracteres Unicode ou
mesmo todas as extens˜oes do ASCII. Focamos
apenas em arquivos ASCII “puros”.
Aqueles que, contudo, procuram esse tipo de
informa¸c˜ao, podem dar uma olhada na classe
java.io.OutputStreamWriter sobre como criar
um Writer levando em conta a codifica¸c˜ao dos
caracteres do arquivo.
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 35 / 38
Videoaula
https://www.youtube.com/watch?v=dHou1G8iYo4
e
https://www.youtube.com/watch?v=4WYyd7MNDqQ
(cobrem parcialmente o conte´udo)
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 36 / 38
Referˆencias Adicionais
http://www.guj.com.br/articles/13
http://www.devmedia.com.br/articles/viewcomp.asp?
comp=1636
http://download.oracle.com/javase/6/docs/api/
java/io/File.html
http://download.oracle.com/javase/6/docs/api/
java/io/FileWriter.html
http:
//tutorials.jenkov.com/java-exception-handling/
basic-try-catch-finally.html
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 37 / 38
Referˆencias Adicionais
http://download.oracle.com/javase/tutorial/
essential/exceptions/index.html
Horstmann, C.S.; Cornell, G.: Core Java 2: Volume I -
Fundamentals. Prentice Hall. 2002.
http://www3.ntu.edu.sg/home/ehchua/programming/
java/J5a_Exception.html
Bloch, J.: Effective Java: Programming Language Guide.
Addison-Wesley. 2001.
http://download.oracle.com/javase/tutorial/java/
nutsandbolts/op3.html
Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 38 / 38

Mais conteúdo relacionado

Semelhante a (ACH2001) Introdução à Programação - Aula 23

Tutorial java swing
Tutorial java swingTutorial java swing
Tutorial java swing
izalem nascimento
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
Stephen Chin
 
Java
JavaJava
Java
bielgott
 
Java 05
Java 05Java 05
Java 05
samuelthiago
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
Maurício Linhares
 
2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples
Lukinha92
 
2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples
Lukinha92
 

Semelhante a (ACH2001) Introdução à Programação - Aula 23 (7)

Tutorial java swing
Tutorial java swingTutorial java swing
Tutorial java swing
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
 
Java
JavaJava
Java
 
Java 05
Java 05Java 05
Java 05
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
 
2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples
 
2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples
 

Mais de Norton Trevisan Roman

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05
Norton Trevisan Roman
 

Mais de Norton Trevisan Roman (20)

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05
 

Último

Atividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º anoAtividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º ano
fernandacosta37763
 
Leonardo da Vinci .pptx
Leonardo da Vinci                  .pptxLeonardo da Vinci                  .pptx
Leonardo da Vinci .pptx
TomasSousa7
 
Atividade letra da música - Espalhe Amor, Anavitória.
Atividade letra da música - Espalhe  Amor, Anavitória.Atividade letra da música - Espalhe  Amor, Anavitória.
Atividade letra da música - Espalhe Amor, Anavitória.
Mary Alvarenga
 
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptxTreinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
MarcosPaulo777883
 
Livro: Pedagogia do Oprimido - Paulo Freire
Livro: Pedagogia do Oprimido - Paulo FreireLivro: Pedagogia do Oprimido - Paulo Freire
Livro: Pedagogia do Oprimido - Paulo Freire
WelberMerlinCardoso
 
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
LucianaCristina58
 
Pintura Romana .pptx
Pintura Romana                     .pptxPintura Romana                     .pptx
Pintura Romana .pptx
TomasSousa7
 
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - AlfabetinhoAtividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
MateusTavares54
 
D20 - Descritores SAEB de Língua Portuguesa
D20 - Descritores SAEB de Língua PortuguesaD20 - Descritores SAEB de Língua Portuguesa
D20 - Descritores SAEB de Língua Portuguesa
eaiprofpolly
 
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptxSlides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
LuizHenriquedeAlmeid6
 
OS elementos de uma boa Redação para o ENEM.pdf
OS elementos de uma boa Redação para o ENEM.pdfOS elementos de uma boa Redação para o ENEM.pdf
OS elementos de uma boa Redação para o ENEM.pdf
AmiltonAparecido1
 
Redação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptxRedação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptx
DECIOMAURINARAMOS
 
Testes + soluções_Mensagens12 )11111.pdf
Testes + soluções_Mensagens12 )11111.pdfTestes + soluções_Mensagens12 )11111.pdf
Testes + soluções_Mensagens12 )11111.pdf
lveiga112
 
O que é um Ménage a Trois Contemporâneo .pdf
O que é um Ménage a Trois Contemporâneo .pdfO que é um Ménage a Trois Contemporâneo .pdf
O que é um Ménage a Trois Contemporâneo .pdf
Pastor Robson Colaço
 
1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf
1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf
1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf
SILVIAREGINANAZARECA
 
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptxAula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
edivirgesribeiro1
 
Leis de Mendel - as ervilhas e a maneira simples de entender.ppt
Leis de Mendel - as ervilhas e a maneira simples de entender.pptLeis de Mendel - as ervilhas e a maneira simples de entender.ppt
Leis de Mendel - as ervilhas e a maneira simples de entender.ppt
PatriciaZanoli
 
Aula 2 - Revisando o significado de fração - Parte 2.pptx
Aula 2 - Revisando o significado de fração - Parte 2.pptxAula 2 - Revisando o significado de fração - Parte 2.pptx
Aula 2 - Revisando o significado de fração - Parte 2.pptx
LILIANPRESTESSCUDELE
 
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdfUFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
Manuais Formação
 
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdfCRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
soaresdesouzaamanda8
 

Último (20)

Atividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º anoAtividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º ano
 
Leonardo da Vinci .pptx
Leonardo da Vinci                  .pptxLeonardo da Vinci                  .pptx
Leonardo da Vinci .pptx
 
Atividade letra da música - Espalhe Amor, Anavitória.
Atividade letra da música - Espalhe  Amor, Anavitória.Atividade letra da música - Espalhe  Amor, Anavitória.
Atividade letra da música - Espalhe Amor, Anavitória.
 
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptxTreinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
 
Livro: Pedagogia do Oprimido - Paulo Freire
Livro: Pedagogia do Oprimido - Paulo FreireLivro: Pedagogia do Oprimido - Paulo Freire
Livro: Pedagogia do Oprimido - Paulo Freire
 
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
 
Pintura Romana .pptx
Pintura Romana                     .pptxPintura Romana                     .pptx
Pintura Romana .pptx
 
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - AlfabetinhoAtividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
 
D20 - Descritores SAEB de Língua Portuguesa
D20 - Descritores SAEB de Língua PortuguesaD20 - Descritores SAEB de Língua Portuguesa
D20 - Descritores SAEB de Língua Portuguesa
 
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptxSlides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
 
OS elementos de uma boa Redação para o ENEM.pdf
OS elementos de uma boa Redação para o ENEM.pdfOS elementos de uma boa Redação para o ENEM.pdf
OS elementos de uma boa Redação para o ENEM.pdf
 
Redação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptxRedação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptx
 
Testes + soluções_Mensagens12 )11111.pdf
Testes + soluções_Mensagens12 )11111.pdfTestes + soluções_Mensagens12 )11111.pdf
Testes + soluções_Mensagens12 )11111.pdf
 
O que é um Ménage a Trois Contemporâneo .pdf
O que é um Ménage a Trois Contemporâneo .pdfO que é um Ménage a Trois Contemporâneo .pdf
O que é um Ménage a Trois Contemporâneo .pdf
 
1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf
1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf
1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf
 
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptxAula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
 
Leis de Mendel - as ervilhas e a maneira simples de entender.ppt
Leis de Mendel - as ervilhas e a maneira simples de entender.pptLeis de Mendel - as ervilhas e a maneira simples de entender.ppt
Leis de Mendel - as ervilhas e a maneira simples de entender.ppt
 
Aula 2 - Revisando o significado de fração - Parte 2.pptx
Aula 2 - Revisando o significado de fração - Parte 2.pptxAula 2 - Revisando o significado de fração - Parte 2.pptx
Aula 2 - Revisando o significado de fração - Parte 2.pptx
 
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdfUFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
 
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdfCRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
 

(ACH2001) Introdução à Programação - Aula 23

  • 1. Aula 23 – Arquivos e Exce¸c˜oes Norton Trevisan Roman 29 de maio de 2020 Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 1 / 38
  • 2. Arquivos Nossos programas tˆem um grande inconveniente Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 2 / 38
  • 3. Arquivos Nossos programas tˆem um grande inconveniente Dados de configura¸c˜ao, que deveriam ser preservados, precisam ser fornecidos a cada vez que o programa roda Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 2 / 38
  • 4. Arquivos Nossos programas tˆem um grande inconveniente Dados de configura¸c˜ao, que deveriam ser preservados, precisam ser fornecidos a cada vez que o programa roda Como preserv´a-los ent˜ao? Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 2 / 38
  • 5. Arquivos Nossos programas tˆem um grande inconveniente Dados de configura¸c˜ao, que deveriam ser preservados, precisam ser fornecidos a cada vez que o programa roda Como preserv´a-los ent˜ao? Guardando em arquivos Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 2 / 38
  • 6. Arquivos Nossos programas tˆem um grande inconveniente Dados de configura¸c˜ao, que deveriam ser preservados, precisam ser fornecidos a cada vez que o programa roda Como preserv´a-los ent˜ao? Guardando em arquivos Em java h´a v´arios modos Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 2 / 38
  • 7. Arquivos Nossos programas tˆem um grande inconveniente Dados de configura¸c˜ao, que deveriam ser preservados, precisam ser fornecidos a cada vez que o programa roda Como preserv´a-los ent˜ao? Guardando em arquivos Em java h´a v´arios modos Um modo ´e criar um objeto File Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 2 / 38
  • 8. Arquivos Nossos programas tˆem um grande inconveniente Dados de configura¸c˜ao, que deveriam ser preservados, precisam ser fornecidos a cada vez que o programa roda Como preserv´a-los ent˜ao? Guardando em arquivos Em java h´a v´arios modos Um modo ´e criar um objeto File import java.io.File; class Projeto { ... public boolean gravaArq(String nome) { File arq = new File(nome); ... } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 2 / 38
  • 9. Arquivos Nossos programas tˆem um grande inconveniente Dados de configura¸c˜ao, que deveriam ser preservados, precisam ser fornecidos a cada vez que o programa roda Como preserv´a-los ent˜ao? Guardando em arquivos Em java h´a v´arios modos Um modo ´e criar um objeto File import java.io.File; class Projeto { ... public boolean gravaArq(String nome) { File arq = new File(nome); ... } } Instˆancias da classe java.io.File representam caminhos (paths) para poss´ıveis locais no sistema de arquivos Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 2 / 38
  • 10. Arquivos Apenas representam um arquivo ou diret´orio import java.io.File; class Projeto { ... public boolean gravaArq(String nome) { File arq = new File(nome); ... } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 3 / 38
  • 11. Arquivos Apenas representam um arquivo ou diret´orio N˜ao necessariamente o caminho existe import java.io.File; class Projeto { ... public boolean gravaArq(String nome) { File arq = new File(nome); ... } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 3 / 38
  • 12. Arquivos Apenas representam um arquivo ou diret´orio N˜ao necessariamente o caminho existe N˜ao criam o arquivo ou diret´orio import java.io.File; class Projeto { ... public boolean gravaArq(String nome) { File arq = new File(nome); ... } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 3 / 38
  • 13. Arquivos Mas isso s´o n˜ao basta Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 4 / 38
  • 14. Arquivos Mas isso s´o n˜ao basta Temos que escrever o string no arquivo import java.io.File; import java.io.FileWriter; class Projeto { ... public boolean gravaArq(String nome) { File arq = new File(nome); FileWriter writer = new FileWriter(arq,false); return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 4 / 38
  • 15. Arquivos Mas isso s´o n˜ao basta Temos que escrever o string no arquivo Mas onde? import java.io.File; import java.io.FileWriter; class Projeto { ... public boolean gravaArq(String nome) { File arq = new File(nome); FileWriter writer = new FileWriter(arq,false); return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 4 / 38
  • 16. Arquivos Mas isso s´o n˜ao basta Temos que escrever o string no arquivo Mas onde? Ou no in´ıcio do arquivo import java.io.File; import java.io.FileWriter; class Projeto { ... public boolean gravaArq(String nome) { File arq = new File(nome); FileWriter writer = new FileWriter(arq,false); return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 4 / 38
  • 17. Arquivos Mas isso s´o n˜ao basta Temos que escrever o string no arquivo Mas onde? Ou no in´ıcio do arquivo Se j´a existir, ir´a sobrescrever import java.io.File; import java.io.FileWriter; class Projeto { ... public boolean gravaArq(String nome) { File arq = new File(nome); FileWriter writer = new FileWriter(arq,false); return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 4 / 38
  • 18. Arquivos Mas isso s´o n˜ao basta Temos que escrever o string no arquivo Mas onde? Ou no in´ıcio do arquivo Se j´a existir, ir´a sobrescrever import java.io.File; import java.io.FileWriter; class Projeto { ... public boolean gravaArq(String nome) { File arq = new File(nome); FileWriter writer = new FileWriter(arq,true); return(true); } } Ou em seu final (append) Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 4 / 38
  • 19. Arquivos Mas isso s´o n˜ao basta Temos que escrever o string no arquivo Mas onde? Ou no in´ıcio do arquivo Se j´a existir, ir´a sobrescrever import java.io.File; import java.io.FileWriter; class Projeto { ... public boolean gravaArq(String nome) { File arq = new File(nome); FileWriter writer = new FileWriter(arq,true); return(true); } } Ou em seu final (append) Se n˜ao existir, ir´a criar Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 4 / 38
  • 20. Arquivos E... import java.io.File; import java.io.FileWriter; class Projeto { ... public boolean gravaArq(String nome) { File arq = new File(nome); FileWriter writer = new FileWriter(arq,true); return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 5 / 38
  • 21. Arquivos E... Sa´ıda $javac Projeto.java Projeto.java:52: unreported exception java.io.IOException; must be caught or declared to be thrown FileWriter writer = new FileWriter(arq,true); ^ 1 error import java.io.File; import java.io.FileWriter; class Projeto { ... public boolean gravaArq(String nome) { File arq = new File(nome); FileWriter writer = new FileWriter(arq,true); return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 5 / 38
  • 22. Arquivos E... Sa´ıda $javac Projeto.java Projeto.java:52: unreported exception java.io.IOException; must be caught or declared to be thrown FileWriter writer = new FileWriter(arq,true); ^ 1 error import java.io.File; import java.io.FileWriter; class Projeto { ... public boolean gravaArq(String nome) { File arq = new File(nome); FileWriter writer = new FileWriter(arq,true); return(true); } } Capturada ou declarada como lan¸cada? Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 5 / 38
  • 23. Exce¸c˜oes Exce¸c˜oes s˜ao como o Java trata de seus erros. Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 6 / 38
  • 24. Exce¸c˜oes Exce¸c˜oes s˜ao como o Java trata de seus erros. S˜ao objetos “lan¸cados” de um trecho de c´odigo para fora do m´etodo em que ele est´a Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 6 / 38
  • 25. Exce¸c˜oes Exce¸c˜oes s˜ao como o Java trata de seus erros. S˜ao objetos “lan¸cados” de um trecho de c´odigo para fora do m´etodo em que ele est´a M´etodos que fizeram chamada ao m´etodo problem´atico podem Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 6 / 38
  • 26. Exce¸c˜oes Exce¸c˜oes s˜ao como o Java trata de seus erros. S˜ao objetos “lan¸cados” de um trecho de c´odigo para fora do m´etodo em que ele est´a M´etodos que fizeram chamada ao m´etodo problem´atico podem Capturar e tratar a exce¸c˜ao Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 6 / 38
  • 27. Exce¸c˜oes Exce¸c˜oes s˜ao como o Java trata de seus erros. S˜ao objetos “lan¸cados” de um trecho de c´odigo para fora do m´etodo em que ele est´a M´etodos que fizeram chamada ao m´etodo problem´atico podem Capturar e tratar a exce¸c˜ao Pass´a-la adiante, para o m´etodo que os invocar Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 6 / 38
  • 28. Exce¸c˜oes Passando adiante a batata quente: Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 7 / 38
  • 29. Exce¸c˜oes Passando adiante a batata quente: Basta adicionar throws (e o tipo da exce¸c˜ao repassada) na assinatura do m´etodo em que ela pode ocorrer Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 7 / 38
  • 30. Exce¸c˜oes Passando adiante a batata quente: Basta adicionar throws (e o tipo da exce¸c˜ao repassada) na assinatura do m´etodo em que ela pode ocorrer import java.io.File; import java.io.FileWriter; import java.io.IOException; class Projeto { ... public boolean gravaArq(String nome) throws IOException { File arq = new File(nome); FileWriter writer = new FileWriter(arq,true); return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 7 / 38
  • 31. Exce¸c˜oes Passando adiante a batata quente: Basta adicionar throws (e o tipo da exce¸c˜ao repassada) na assinatura do m´etodo em que ela pode ocorrer O m´etodo que chamar gravaArq que se vire para trat´a-la, ou passe adiante import java.io.File; import java.io.FileWriter; import java.io.IOException; class Projeto { ... public boolean gravaArq(String nome) throws IOException { File arq = new File(nome); FileWriter writer = new FileWriter(arq,true); return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 7 / 38
  • 32. Exce¸c˜oes Capturando e Tratando Exce¸c˜oes import java.io.File; import java.io.FileWriter; import java.io.IOException; class Projeto { ... public boolean gravaArq(String nome) { File arq = new File(nome); return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 8 / 38
  • 33. Exce¸c˜oes Capturando e Tratando Exce¸c˜oes Bloco Try – Catch – Finally import java.io.File; import java.io.FileWriter; import java.io.IOException; class Projeto { ... public boolean gravaArq(String nome) { File arq = new File(nome); try { } catch(IOException ioe) { } finally { } return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 8 / 38
  • 34. Exce¸c˜oes Capturando e Tratando Exce¸c˜oes Bloco Try – Catch – Finally Try: Testa o comando que pode gerar a exce¸c˜ao import java.io.File; import java.io.FileWriter; import java.io.IOException; class Projeto { ... public boolean gravaArq(String nome) { File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,true); } catch(IOException ioe) { } finally { } return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 8 / 38
  • 35. Exce¸c˜oes Capturando e Tratando Exce¸c˜oes Bloco Try – Catch – Finally Try: Testa o comando que pode gerar a exce¸c˜ao Catch: Captura a exce¸c˜ao, executando um c´odigo que o programador define para trat´a-la import java.io.File; import java.io.FileWriter; import java.io.IOException; class Projeto { ... public boolean gravaArq(String nome) { File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,true); } catch(IOException ioe) { return(false); } finally { } return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 8 / 38
  • 36. Exce¸c˜oes Finally (Opcional) import java.io.File; import java.io.FileWriter; import java.io.IOException; class Projeto { ... public boolean gravaArq(String nome) { File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,true); } catch(IOException ioe) { return(false); } finally {// totalmente opcional // Fazendo alguma limpeza } return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 9 / 38
  • 37. Exce¸c˜oes Finally (Opcional) O c´odigo dentro dele sempre ser´a executado, mesmo se houver uma exce¸c˜ao import java.io.File; import java.io.FileWriter; import java.io.IOException; class Projeto { ... public boolean gravaArq(String nome) { File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,true); } catch(IOException ioe) { return(false); } finally {// totalmente opcional // Fazendo alguma limpeza } return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 9 / 38
  • 38. Exce¸c˜oes Finally (Opcional) O c´odigo dentro dele sempre ser´a executado, mesmo se houver uma exce¸c˜ao Se o c´odigo dentro do try ou catch contiver um return, o c´odigo dentro do finally ser´a executado antes do retorno do m´etodo import java.io.File; import java.io.FileWriter; import java.io.IOException; class Projeto { ... public boolean gravaArq(String nome) { File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,true); } catch(IOException ioe) { return(false); } finally {// totalmente opcional // Fazendo alguma limpeza } return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 9 / 38
  • 39. Exce¸c˜oes E se nome for null? import java.io.File; import java.io.FileWriter; import java.io.IOException; class Projeto { ... public boolean gravaArq(String nome) { File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,true); } catch(IOException ioe) { return(false); } return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 10 / 38
  • 40. Exce¸c˜oes E se nome for null? Ou testamos e retornamos import java.io.File; import java.io.FileWriter; import java.io.IOException; class Projeto { ... public boolean gravaArq(String nome) { if (nome == null) { return(false); } File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,true); } catch(IOException ioe) { return(false); } return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 10 / 38
  • 41. Exce¸c˜oes E se nome for null? Ou testamos e retornamos Ou lan¸camos uma exce¸c˜ao import java.io.File; import java.io.FileWriter; import java.io.IOException; class Projeto { ... public boolean gravaArq(String nome) { if (nome == null) { return(false); } File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,true); } catch(IOException ioe) { return(false); } return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 10 / 38
  • 42. Exce¸c˜oes E se nome for null? Ou testamos e retornamos Ou lan¸camos uma exce¸c˜ao Como lan¸car? import java.io.File; import java.io.FileWriter; import java.io.IOException; class Projeto { ... public boolean gravaArq(String nome) { if (nome == null) { return(false); } File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,true); } catch(IOException ioe) { return(false); } return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 10 / 38
  • 43. Exce¸c˜oes E se nome for null? Ou testamos e retornamos Ou lan¸camos uma exce¸c˜ao Como lan¸car? Criando um objeto da exce¸c˜ao desejada import java.io.File; import java.io.FileWriter; import java.io.IOException; class Projeto { ... public boolean gravaArq(String nome) { if (nome == null) { IOException ex = new IOException("Par^ametro nulo"); } File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,true); } catch(IOException ioe) { return(false); } return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 10 / 38
  • 44. Exce¸c˜oes E se nome for null? Ou testamos e retornamos Ou lan¸camos uma exce¸c˜ao Como lan¸car? Criando um objeto da exce¸c˜ao desejada E usando throw import java.io.File; import java.io.FileWriter; import java.io.IOException; class Projeto { ... public boolean gravaArq(String nome) { if (nome == null) { IOException ex = new IOException("Par^ametro nulo"); throw ex; } File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,true); } catch(IOException ioe) { return(false); } return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 10 / 38
  • 45. Exce¸c˜oes Sa´ıda $ javac Projeto.java Projeto.java:60: unreported exception java.io.IOException; must be caught or declared to be thrown throw ex; ^ 1 error import java.io.File; import java.io.FileWriter; import java.io.IOException; class Projeto { ... public boolean gravaArq(String nome) { if (nome == null) { IOException ex = new IOException("Par^ametro nulo"); throw ex; } File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,true); } catch(IOException ioe) { return(false); } return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 11 / 38
  • 46. Exce¸c˜oes Sa´ıda $ javac Projeto.java Projeto.java:60: unreported exception java.io.IOException; must be caught or declared to be thrown throw ex; ^ 1 error Temos tamb´em que declarar que o m´etodo lan¸ca a exce¸c˜ao import java.io.File; import java.io.FileWriter; import java.io.IOException; class Projeto { ... public boolean gravaArq(String nome) throws IOException { if (nome == null) { IOException ex = new IOException("Par^ametro nulo"); throw ex; } File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,true); } catch(IOException ioe) { return(false); } return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 11 / 38
  • 47. Exce¸c˜oes E o que acontece ao fazermos: class Projeto { ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); Projeto p = new Projeto(); p.adicionaRes(new Residencia(cr, null)); p.adicionaRes(new Residencia(cq, null)); p.gravaArq(null); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 12 / 38
  • 48. Exce¸c˜oes E o que acontece ao fazermos: Sa´ıda $ javac Projeto.java Projeto.java:86: unreported exception java.io.IOException; must be caught or declared to be thrown p.gravaArq(null); ^ 1 error class Projeto { ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); Projeto p = new Projeto(); p.adicionaRes(new Residencia(cr, null)); p.adicionaRes(new Residencia(cq, null)); p.gravaArq(null); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 12 / 38
  • 49. Exce¸c˜oes E o que acontece ao fazermos: Sa´ıda $ javac Projeto.java Projeto.java:86: unreported exception java.io.IOException; must be caught or declared to be thrown p.gravaArq(null); ^ 1 error Temos que adicionar o bloco try ... catch class Projeto { ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); Projeto p = new Projeto(); p.adicionaRes(new Residencia(cr, null)); p.adicionaRes(new Residencia(cq, null)); try { p.gravaArq(null); } catch (IOException ioe) { System.out.println( ioe.getMessage()); } } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 12 / 38
  • 50. Exce¸c˜oes E agora? class Projeto { ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); Projeto p = new Projeto(); p.adicionaRes(new Residencia(cr, null)); p.adicionaRes(new Residencia(cq, null)); try { p.gravaArq(null); } catch (IOException ioe) { System.out.println( ioe.getMessage()); } } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 13 / 38
  • 51. Exce¸c˜oes E agora? Sa´ıda $ java Projeto Par^ametro nulo class Projeto { ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); Projeto p = new Projeto(); p.adicionaRes(new Residencia(cr, null)); p.adicionaRes(new Residencia(cq, null)); try { p.gravaArq(null); } catch (IOException ioe) { System.out.println( ioe.getMessage()); } } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 13 / 38
  • 52. Exce¸c˜oes E se IOException n˜ao for a ideal? Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 14 / 38
  • 53. Exce¸c˜oes E se IOException n˜ao for a ideal? E se n˜ao houver ideal? Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 14 / 38
  • 54. Exce¸c˜oes E se IOException n˜ao for a ideal? E se n˜ao houver ideal? Cria-se uma exce¸c˜ao, subclasse de Exception (ou de qualquer outra exce¸c˜ao) Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 14 / 38
  • 55. Exce¸c˜oes E se IOException n˜ao for a ideal? E se n˜ao houver ideal? Cria-se uma exce¸c˜ao, subclasse de Exception (ou de qualquer outra exce¸c˜ao) class MinhaExcecao extends Exception { public MinhaExcecao() {} public MinhaExcecao(String msg){ super(msg); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 14 / 38
  • 56. Exce¸c˜oes Usamos essa exce¸c˜ao como qualquer outra Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 15 / 38
  • 57. Exce¸c˜oes Usamos essa exce¸c˜ao como qualquer outra class Projeto { ... public boolean gravaArq(String nome) throws MinhaExcecao { if (nome == null) { MinhaExcecao ex = new MinhaExcecao("Par^ametro nulo"); throw ex; } File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,true); } catch(IOException ioe) { return(false); } return(true); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 15 / 38
  • 58. Exce¸c˜oes – Pilha de Chamadas O que acontece quando alguem lan¸ca uma exce¸c˜ao? Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 16 / 38
  • 59. Exce¸c˜oes – Pilha de Chamadas O que acontece quando alguem lan¸ca uma exce¸c˜ao? `A medida em que m´etodos s˜ao chamados dentro de outros m´etodos, o JRE armazena todos eles em uma estrutura chamada Pilha de Chamadas Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 16 / 38
  • 60. Exce¸c˜oes – Pilha de Chamadas O que acontece quando alguem lan¸ca uma exce¸c˜ao? `A medida em que m´etodos s˜ao chamados dentro de outros m´etodos, o JRE armazena todos eles em uma estrutura chamada Pilha de Chamadas Se um determinado m´etodo lan¸ca uma exce¸c˜ao, o JRE busca seu tratamento na pilha, indo desde o m´etodo que chamou o m´etodo que lan¸cou a exce¸c˜ao, at´e atingir main, se nenhum m´etodo no caminho tratar da exce¸c˜ao. Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 16 / 38
  • 61. Pilha de Chamadas Chamada Busca por tratamento da Exce¸c˜ao Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 17 / 38
  • 62. Arquivos E como podemos ver a pilha de execu¸c˜ao? Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 18 / 38
  • 63. Arquivos E como podemos ver a pilha de execu¸c˜ao? printStackTrace public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); Projeto p = new Projeto(); p.adicionaRes(new Residencia(cr, null)); p.adicionaRes(new Residencia(cq, null)); try { p.gravaArq(null); } catch (IOException ioe) { ioe.printStackTrace(); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 18 / 38
  • 64. Arquivos E como podemos ver a pilha de execu¸c˜ao? printStackTrace A existˆencia de m´ultiplas exce¸c˜oes abre para a possibilidade de m´ultiplos blocos catch. public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); Projeto p = new Projeto(); p.adicionaRes(new Residencia(cr, null)); p.adicionaRes(new Residencia(cq, null)); try { p.gravaArq(null); } catch (IOException ioe) { ioe.printStackTrace(); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 18 / 38
  • 65. Arquivos Criamos um para cada tipo de exce¸c˜ao tratada public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); Projeto p = new Projeto(); p.adicionaRes(new Residencia(cr, null)); p.adicionaRes(new Residencia(cq, null)); try { p.gravaArq(null); } catch (IOException ioe) { ioe.printStackTrace(); } catch (MinhaExcecao me) { System.out.println(me.getMessage()); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 19 / 38
  • 66. Arquivos Criamos um para cada tipo de exce¸c˜ao tratada Com c´odigo espec´ıfico para cada exce¸c˜ao public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); Projeto p = new Projeto(); p.adicionaRes(new Residencia(cr, null)); p.adicionaRes(new Residencia(cq, null)); try { p.gravaArq(null); } catch (IOException ioe) { ioe.printStackTrace(); } catch (MinhaExcecao me) { System.out.println(me.getMessage()); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 19 / 38
  • 67. Arquivos Criamos um para cada tipo de exce¸c˜ao tratada Com c´odigo espec´ıfico para cada exce¸c˜ao Nos permite tomar decis˜oes diferentes conforme o tipo de erro encontrado. public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); Projeto p = new Projeto(); p.adicionaRes(new Residencia(cr, null)); p.adicionaRes(new Residencia(cq, null)); try { p.gravaArq(null); } catch (IOException ioe) { ioe.printStackTrace(); } catch (MinhaExcecao me) { System.out.println(me.getMessage()); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 19 / 38
  • 68. Algumas Exce¸c˜oes int x = Integer.parseInt("five"); Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 20 / 38
  • 69. Algumas Exce¸c˜oes int x = Integer.parseInt("five"); java.lang.NumberFormatException Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 20 / 38
  • 70. Algumas Exce¸c˜oes int x = Integer.parseInt("five"); java.lang.NumberFormatException int[] y = {1, 3}; System.out.println(y[3]); Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 20 / 38
  • 71. Algumas Exce¸c˜oes int x = Integer.parseInt("five"); java.lang.NumberFormatException int[] y = {1, 3}; System.out.println(y[3]); java.lang.ArrayIndexOutOfBoundsException Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 20 / 38
  • 72. Algumas Exce¸c˜oes int x = Integer.parseInt("five"); java.lang.NumberFormatException int[] y = {1, 3}; System.out.println(y[3]); java.lang.ArrayIndexOutOfBoundsException int[] z = {1, 3}; z[-1] = 2; Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 20 / 38
  • 73. Algumas Exce¸c˜oes int x = Integer.parseInt("five"); java.lang.NumberFormatException int[] y = {1, 3}; System.out.println(y[3]); java.lang.ArrayIndexOutOfBoundsException int[] z = {1, 3}; z[-1] = 2; java.lang.ArrayIndexOutOfBoundsException Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 20 / 38
  • 74. Algumas Exce¸c˜oes int x = Integer.parseInt("five"); java.lang.NumberFormatException int[] y = {1, 3}; System.out.println(y[3]); java.lang.ArrayIndexOutOfBoundsException int[] z = {1, 3}; z[-1] = 2; java.lang.ArrayIndexOutOfBoundsException int w = 10 / 0; Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 20 / 38
  • 75. Algumas Exce¸c˜oes int x = Integer.parseInt("five"); java.lang.NumberFormatException int[] y = {1, 3}; System.out.println(y[3]); java.lang.ArrayIndexOutOfBoundsException int[] z = {1, 3}; z[-1] = 2; java.lang.ArrayIndexOutOfBoundsException int w = 10 / 0; java.lang.ArithmeticException Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 20 / 38
  • 76. Algumas Exce¸c˜oes int x = Integer.parseInt("five"); java.lang.NumberFormatException int[] y = {1, 3}; System.out.println(y[3]); java.lang.ArrayIndexOutOfBoundsException int[] z = {1, 3}; z[-1] = 2; java.lang.ArrayIndexOutOfBoundsException int w = 10 / 0; java.lang.ArithmeticException class Aula23 { public static void main(String[] args) { try { int w = 10 / 0; } catch(Exception e) { } } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 20 / 38
  • 77. Algumas Exce¸c˜oes int x = Integer.parseInt("five"); java.lang.NumberFormatException int[] y = {1, 3}; System.out.println(y[3]); java.lang.ArrayIndexOutOfBoundsException int[] z = {1, 3}; z[-1] = 2; java.lang.ArrayIndexOutOfBoundsException int w = 10 / 0; java.lang.ArithmeticException class Aula23 { public static void main(String[] args) { try { int w = 10 / 0; } catch(Exception e) { e.printStackTrace(); } } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 20 / 38
  • 78. Algumas Exce¸c˜oes int x = Integer.parseInt("five"); java.lang.NumberFormatException int[] y = {1, 3}; System.out.println(y[3]); java.lang.ArrayIndexOutOfBoundsException int[] z = {1, 3}; z[-1] = 2; java.lang.ArrayIndexOutOfBoundsException int w = 10 / 0; java.lang.ArithmeticException class Aula23 { public static void main(String[] args) { try { int w = 10 / 0; } catch(Exception e) { e.printStackTrace(); } } } Sa´ıda $ java Aula23 java.lang.ArithmeticException: / by zero at Aula23.main(Aula23.java:5) Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 20 / 38
  • 79. Por fim... Assim como podemos capturar m´ultiplas exce¸c˜oes, tamb´em podemos repass´a-las Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 21 / 38
  • 80. Por fim... Assim como podemos capturar m´ultiplas exce¸c˜oes, tamb´em podemos repass´a-las Ex: public boolean gravaArq(String nome) throws MinhaExcecao, IOException {...} Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 21 / 38
  • 81. Checked × Unchecked H´a dois tipos b´asicos de exce¸c˜ao Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 22 / 38
  • 82. Checked × Unchecked H´a dois tipos b´asicos de exce¸c˜ao Checked: Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 22 / 38
  • 83. Checked × Unchecked H´a dois tipos b´asicos de exce¸c˜ao Checked: Devem ser explicitamente capturadas ou propagadas Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 22 / 38
  • 84. Checked × Unchecked H´a dois tipos b´asicos de exce¸c˜ao Checked: Devem ser explicitamente capturadas ou propagadas Estendem java.lang.Exception Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 22 / 38
  • 85. Checked × Unchecked H´a dois tipos b´asicos de exce¸c˜ao Checked: Devem ser explicitamente capturadas ou propagadas Estendem java.lang.Exception Unchecked (ou Run-Time): Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 22 / 38
  • 86. Checked × Unchecked H´a dois tipos b´asicos de exce¸c˜ao Checked: Devem ser explicitamente capturadas ou propagadas Estendem java.lang.Exception Unchecked (ou Run-Time): N˜ao precisam ser capturadas ou propagadas Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 22 / 38
  • 87. Checked × Unchecked H´a dois tipos b´asicos de exce¸c˜ao Checked: Devem ser explicitamente capturadas ou propagadas Estendem java.lang.Exception Unchecked (ou Run-Time): N˜ao precisam ser capturadas ou propagadas Passam “despercebidas” pelo compilador Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 22 / 38
  • 88. Checked × Unchecked H´a dois tipos b´asicos de exce¸c˜ao Checked: Devem ser explicitamente capturadas ou propagadas Estendem java.lang.Exception Unchecked (ou Run-Time): N˜ao precisam ser capturadas ou propagadas Passam “despercebidas” pelo compilador O programador s´o descobre que elas existem quando h´a um erro que p´ara o programa Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 22 / 38
  • 89. Checked × Unchecked H´a dois tipos b´asicos de exce¸c˜ao Checked: Devem ser explicitamente capturadas ou propagadas Estendem java.lang.Exception Unchecked (ou Run-Time): N˜ao precisam ser capturadas ou propagadas Passam “despercebidas” pelo compilador O programador s´o descobre que elas existem quando h´a um erro que p´ara o programa Estendem java.lang.RuntimeException Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 22 / 38
  • 90. Checked × Unchecked H´a dois tipos b´asicos de exce¸c˜ao Checked: Devem ser explicitamente capturadas ou propagadas Estendem java.lang.Exception Unchecked (ou Run-Time): N˜ao precisam ser capturadas ou propagadas Passam “despercebidas” pelo compilador O programador s´o descobre que elas existem quando h´a um erro que p´ara o programa Estendem java.lang.RuntimeException MUITO CUIDADO COM ESSAS! Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 22 / 38
  • 91. Arquivos Voltemos ao c´odigo. public boolean gravaArq(String nome) { if (nome == null) return(false); File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,false); } catch(IOException ioe) { return(false); } return(true); } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 23 / 38
  • 92. Arquivos Voltemos ao c´odigo. Por simplicidade, retornamos false no caso de nome == null public boolean gravaArq(String nome) { if (nome == null) return(false); File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,false); } catch(IOException ioe) { return(false); } return(true); } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 23 / 38
  • 93. Arquivos Voltemos ao c´odigo. Por simplicidade, retornamos false no caso de nome == null O que isso faz? public boolean gravaArq(String nome) { if (nome == null) return(false); File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,false); } catch(IOException ioe) { return(false); } return(true); } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 23 / 38
  • 94. Arquivos Voltemos ao c´odigo. Por simplicidade, retornamos false no caso de nome == null O que isso faz? Cria um arquivo de nome nome public boolean gravaArq(String nome) { if (nome == null) return(false); File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,false); } catch(IOException ioe) { return(false); } return(true); } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 23 / 38
  • 95. Arquivos Voltemos ao c´odigo. Por simplicidade, retornamos false no caso de nome == null O que isso faz? Cria um arquivo de nome nome Se j´a existir, sobrescreve public boolean gravaArq(String nome) { if (nome == null) return(false); File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,false); } catch(IOException ioe) { return(false); } return(true); } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 23 / 38
  • 96. Arquivos Falta gravar as informa¸c˜oes relevantes l´a public boolean gravaArq(String nome) { if (nome == null) return(false); File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,false); } catch(IOException ioe) { return(false); } return(true); } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 24 / 38
  • 97. Arquivos Falta gravar as informa¸c˜oes relevantes l´a No caso, a ´area da casa e da piscina public boolean gravaArq(String nome) { if (nome == null) return(false); File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,false); No p = this.condominio.getCabeca(); while (p != null) { Residencia r = p.getRes(); if (r.casa != null) { writer.write("Casa:´Area:" + r.casa.area()+"n"); } if (r.piscina != null) { writer.write("Piscina:´Area:" + r.piscina.area()+"n"); } p = p.getProx(); } } catch(IOException ioe) { return(false); } return(true); } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 24 / 38
  • 98. Arquivos Falta gravar as informa¸c˜oes relevantes l´a No caso, a ´area da casa e da piscina Repare nos n public boolean gravaArq(String nome) { if (nome == null) return(false); File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,false); No p = this.condominio.getCabeca(); while (p != null) { Residencia r = p.getRes(); if (r.casa != null) { writer.write("Casa:´Area:" + r.casa.area()+"n"); } if (r.piscina != null) { writer.write("Piscina:´Area:" + r.piscina.area()+"n"); } p = p.getProx(); } } catch(IOException ioe) { return(false); } return(true); } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 24 / 38
  • 99. Arquivos Falta gravar as informa¸c˜oes relevantes l´a No caso, a ´area da casa e da piscina Repare nos n E fechar o arquivo (impedindo novas grava¸c˜oes) public boolean gravaArq(String nome) { if (nome == null) return(false); File arq = new File(nome); try { FileWriter writer = new FileWriter(arq,false); No p = this.condominio.getCabeca(); while (p != null) { Residencia r = p.getRes(); if (r.casa != null) { writer.write("Casa:´Area:" + r.casa.area()+"n"); } if (r.piscina != null) { writer.write("Piscina:´Area:" + r.piscina.area()+"n"); } p = p.getProx(); } writer.close(); } catch(IOException ioe) { return(false); } return(true); } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 24 / 38
  • 100. Arquivos E como usamos isso? Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 25 / 38
  • 101. Arquivos E como usamos isso? public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); Projeto p = new Projeto(); p.adicionaRes(new Residencia(cr, null)); p.adicionaRes(new Residencia(cq, null)); if (!p.gravaArq("oba")) System.out.println("Problema"); } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 25 / 38
  • 102. Arquivos Vimos como escrevemos em um arquivo. Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 26 / 38
  • 103. Arquivos Vimos como escrevemos em um arquivo. Mas, e como lemos de um arquivo? Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 26 / 38
  • 104. Arquivos Vimos como escrevemos em um arquivo. Mas, e como lemos de um arquivo? Com Scanner import java.util.Scanner; import java.io.FileNotFoundException; ... public static void main(String[] args) { try { File arq = new File("oba"); Scanner sc = new Scanner(arq); while (sc.hasNext()) { System.out.println(sc.next()); } sc.close(); } catch (FileNotFoundException fnfe) { System.out.println(fnfe.getMessage()); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 26 / 38
  • 105. Arquivos Vimos como escrevemos em um arquivo. Mas, e como lemos de um arquivo? Com Scanner Teremos que capturar exce¸c˜ao import java.util.Scanner; import java.io.FileNotFoundException; ... public static void main(String[] args) { try { File arq = new File("oba"); Scanner sc = new Scanner(arq); while (sc.hasNext()) { System.out.println(sc.next()); } sc.close(); } catch (FileNotFoundException fnfe) { System.out.println(fnfe.getMessage()); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 26 / 38
  • 106. Arquivos Scanner quebra os s´ımbolos usando como delimitador o espa¸co import java.util.Scanner; import java.io.FileNotFoundException; ... public static void main(String[] args) { try { File arq = new File("oba"); Scanner sc = new Scanner(arq); while (sc.hasNext()) { System.out.println(sc.next()); } sc.close(); } catch (FileNotFoundException fnfe) { System.out.println(fnfe.getMessage()); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 27 / 38
  • 107. Arquivos Scanner quebra os s´ımbolos usando como delimitador o espa¸co E como ler a linha inteira? import java.util.Scanner; import java.io.FileNotFoundException; ... public static void main(String[] args) { try { File arq = new File("oba"); Scanner sc = new Scanner(arq); while (sc.hasNext()) { System.out.println(sc.next()); } sc.close(); } catch (FileNotFoundException fnfe) { System.out.println(fnfe.getMessage()); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 27 / 38
  • 108. Arquivos Scanner quebra os s´ımbolos usando como delimitador o espa¸co E como ler a linha inteira? Com nextLine() import java.util.Scanner; import java.io.FileNotFoundException; ... public static void main(String[] args) { try { File arq = new File("oba"); Scanner sc = new Scanner(arq); while (sc.hasNext()) { System.out.println(sc.nextLine()); } sc.close(); } catch (FileNotFoundException fnfe) { System.out.println(fnfe.getMessage()); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 27 / 38
  • 109. Arquivos – Um exemplo mais complexo Encriptar o conte´udo de um arquivo oba, contendo: teste1 teste2 teste3 Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 28 / 38
  • 110. Arquivos – Um exemplo mais complexo Encriptar o conte´udo de um arquivo oba, contendo: teste1 teste2 teste3 Como fazer? Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 28 / 38
  • 111. Arquivos – Um exemplo mais complexo Encriptar o conte´udo de um arquivo oba, contendo: teste1 teste2 teste3 Como fazer? import java.io.File; import java.io.IOException; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileInputStream; public class Encriptador { public static void main(String[] args){ ... } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 28 / 38
  • 112. Arquivos – Um exemplo mais complexo Encriptar o conte´udo de um arquivo oba, contendo: teste1 teste2 teste3 Como fazer? Usamos as classes espec´ıficas para lidar com bytes de dados import java.io.File; import java.io.IOException; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileInputStream; public class Encriptador { public static void main(String[] args){ ... } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 28 / 38
  • 113. Arquivos – Um exemplo mais complexo public static void main(String[] args) { File arq = new File("oba"); File arq2 = new File("oba2"); try { FileOutputStream writer = new FileOutputStream(arq2,false); FileInputStream reader = new FileInputStream(arq); int b; while ((b = reader.read()) != -1) { b = ~b; writer.write(b); } writer.close(); reader.close(); arq.delete(); arq2.renameTo(arq); } catch(IOException ioe) { System.out.println(ioe.getMessage()); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 29 / 38
  • 114. Arquivos – Um exemplo mais complexo Criamos um novo arquivo, oba2 public static void main(String[] args) { File arq = new File("oba"); File arq2 = new File("oba2"); try { FileOutputStream writer = new FileOutputStream(arq2,false); FileInputStream reader = new FileInputStream(arq); int b; while ((b = reader.read()) != -1) { b = ~b; writer.write(b); } writer.close(); reader.close(); arq.delete(); arq2.renameTo(arq); } catch(IOException ioe) { System.out.println(ioe.getMessage()); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 29 / 38
  • 115. Arquivos – Um exemplo mais complexo Criamos um novo arquivo, oba2 Lemos cada linha do antigo public static void main(String[] args) { File arq = new File("oba"); File arq2 = new File("oba2"); try { FileOutputStream writer = new FileOutputStream(arq2,false); FileInputStream reader = new FileInputStream(arq); int b; while ((b = reader.read()) != -1) { b = ~b; writer.write(b); } writer.close(); reader.close(); arq.delete(); arq2.renameTo(arq); } catch(IOException ioe) { System.out.println(ioe.getMessage()); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 29 / 38
  • 116. Arquivos – Um exemplo mais complexo Criamos um novo arquivo, oba2 Lemos cada linha do antigo read retorna -1 ao final do arquivo public static void main(String[] args) { File arq = new File("oba"); File arq2 = new File("oba2"); try { FileOutputStream writer = new FileOutputStream(arq2,false); FileInputStream reader = new FileInputStream(arq); int b; while ((b = reader.read()) != -1) { b = ~b; writer.write(b); } writer.close(); reader.close(); arq.delete(); arq2.renameTo(arq); } catch(IOException ioe) { System.out.println(ioe.getMessage()); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 29 / 38
  • 117. Arquivos – Um exemplo mais complexo Criamos um novo arquivo, oba2 Lemos cada linha do antigo read retorna -1 ao final do arquivo Encriptamos public static void main(String[] args) { File arq = new File("oba"); File arq2 = new File("oba2"); try { FileOutputStream writer = new FileOutputStream(arq2,false); FileInputStream reader = new FileInputStream(arq); int b; while ((b = reader.read()) != -1) { b = ~b; writer.write(b); } writer.close(); reader.close(); arq.delete(); arq2.renameTo(arq); } catch(IOException ioe) { System.out.println(ioe.getMessage()); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 29 / 38
  • 118. Arquivos – Um exemplo mais complexo Criamos um novo arquivo, oba2 Lemos cada linha do antigo read retorna -1 ao final do arquivo Encriptamos Gravamos no novo arquivo public static void main(String[] args) { File arq = new File("oba"); File arq2 = new File("oba2"); try { FileOutputStream writer = new FileOutputStream(arq2,false); FileInputStream reader = new FileInputStream(arq); int b; while ((b = reader.read()) != -1) { b = ~b; writer.write(b); } writer.close(); reader.close(); arq.delete(); arq2.renameTo(arq); } catch(IOException ioe) { System.out.println(ioe.getMessage()); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 29 / 38
  • 119. Arquivos – Um exemplo mais complexo Criamos um novo arquivo, oba2 Lemos cada linha do antigo read retorna -1 ao final do arquivo Encriptamos Gravamos no novo arquivo Apagamos o antigo public static void main(String[] args) { File arq = new File("oba"); File arq2 = new File("oba2"); try { FileOutputStream writer = new FileOutputStream(arq2,false); FileInputStream reader = new FileInputStream(arq); int b; while ((b = reader.read()) != -1) { b = ~b; writer.write(b); } writer.close(); reader.close(); arq.delete(); arq2.renameTo(arq); } catch(IOException ioe) { System.out.println(ioe.getMessage()); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 29 / 38
  • 120. Arquivos – Um exemplo mais complexo Criamos um novo arquivo, oba2 Lemos cada linha do antigo read retorna -1 ao final do arquivo Encriptamos Gravamos no novo arquivo Apagamos o antigo Substituimos pelo novo public static void main(String[] args) { File arq = new File("oba"); File arq2 = new File("oba2"); try { FileOutputStream writer = new FileOutputStream(arq2,false); FileInputStream reader = new FileInputStream(arq); int b; while ((b = reader.read()) != -1) { b = ~b; writer.write(b); } writer.close(); reader.close(); arq.delete(); arq2.renameTo(arq); } catch(IOException ioe) { System.out.println(ioe.getMessage()); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 29 / 38
  • 121. Arquivos – Um exemplo mais complexo E como encriptamos? Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 30 / 38
  • 122. Arquivos – Um exemplo mais complexo E como encriptamos? Da maneira mais simples: Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 30 / 38
  • 123. Arquivos – Um exemplo mais complexo E como encriptamos? Da maneira mais simples: Invertendo os bits do byte lido Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 30 / 38
  • 124. Arquivos – Um exemplo mais complexo E como encriptamos? Da maneira mais simples: Invertendo os bits do byte lido ˜ Corresponde a um n˜ao bit a bit Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 30 / 38
  • 125. Arquivos – Um exemplo mais complexo E como encriptamos? Da maneira mais simples: Invertendo os bits do byte lido ˜ Corresponde a um n˜ao bit a bit Os bits da vari´avel s˜ao analisados individualmente Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 30 / 38
  • 126. Arquivos – Um exemplo mais complexo E como encriptamos? Da maneira mais simples: Invertendo os bits do byte lido ˜ Corresponde a um n˜ao bit a bit Os bits da vari´avel s˜ao analisados individualmente Bit 1 vira 0 e bit 0 vira 1 Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 30 / 38
  • 127. Arquivos – Um exemplo mais complexo Ex: Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 31 / 38
  • 128. Arquivos – Um exemplo mais complexo Ex: ˜11001010 → 00110101 Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 31 / 38
  • 129. Arquivos – Um exemplo mais complexo Ex: ˜11001010 → 00110101 ˜00110101 → 11001010 Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 31 / 38
  • 130. Arquivos – Um exemplo mais complexo Ex: ˜11001010 → 00110101 ˜00110101 → 11001010 Essa caracter´ıstica (reversibilidade) ´e o que o torna ´util ao nosso prop´osito Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 31 / 38
  • 131. Arquivos – Um exemplo mais complexo E qual a sa´ıda de nosso c´odigo? public static void main(String[] args) { File arq = new File("oba"); File arq2 = new File("oba2"); try { FileOutputStream writer = new FileOutputStream(arq2,false); FileInputStream reader = new FileInputStream(arq); int b; while ((b = reader.read()) != -1) { b = ~b; writer.write(b); } writer.close(); reader.close(); arq.delete(); arq2.renameTo(arq); } catch(IOException ioe) { System.out.println(ioe.getMessage()); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 32 / 38
  • 132. Arquivos – Um exemplo mais complexo E qual a sa´ıda de nosso c´odigo? Sa´ıda $ cat oba teste1 teste2 teste3 $ java Encriptador $ cat oba $ java Encriptador $ cat oba teste1 teste2 teste3 public static void main(String[] args) { File arq = new File("oba"); File arq2 = new File("oba2"); try { FileOutputStream writer = new FileOutputStream(arq2,false); FileInputStream reader = new FileInputStream(arq); int b; while ((b = reader.read()) != -1) { b = ~b; writer.write(b); } writer.close(); reader.close(); arq.delete(); arq2.renameTo(arq); } catch(IOException ioe) { System.out.println(ioe.getMessage()); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 32 / 38
  • 133. Arquivos – Um exemplo mais complexo E qual a sa´ıda de nosso c´odigo? Sa´ıda $ cat oba teste1 teste2 teste3 $ java Encriptador $ cat oba $ java Encriptador $ cat oba teste1 teste2 teste3 Note que o mesmo c´odigo que encripta, tamb´em decripta public static void main(String[] args) { File arq = new File("oba"); File arq2 = new File("oba2"); try { FileOutputStream writer = new FileOutputStream(arq2,false); FileInputStream reader = new FileInputStream(arq); int b; while ((b = reader.read()) != -1) { b = ~b; writer.write(b); } writer.close(); reader.close(); arq.delete(); arq2.renameTo(arq); } catch(IOException ioe) { System.out.println(ioe.getMessage()); } } Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 32 / 38
  • 134. Operadores Bit a Bit Aplicam-se a inteiros (int, long, char, byte) Operador A¸c˜ao Exemplo not ~11001010 ˜ inverte bits 00110101 and 11001010 & filtra bits & 01100110 01000010 or 11001010 | “liga” bits | 01100010 11101010 xor 11001010 ˆ ou exclusivo ^ 01100010 “desliga” bits 10101000 Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 33 / 38
  • 135. Ou Exclusivo Verdadeiro se ou uma das condi¸c˜oes ´e verdadeira ou a outra ´e, nunca as duas ou nenhuma delas Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 34 / 38
  • 136. Ou Exclusivo Verdadeiro se ou uma das condi¸c˜oes ´e verdadeira ou a outra ´e, nunca as duas ou nenhuma delas XOr: Comando1 ser´a executado? if ((condi¸c~ao1 || condi¸c~ao2) && !(condi¸c~ao1 && condi¸c~ao2)) comando1; Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 34 / 38
  • 137. Ou Exclusivo Verdadeiro se ou uma das condi¸c˜oes ´e verdadeira ou a outra ´e, nunca as duas ou nenhuma delas XOr: Comando1 ser´a executado? condi¸c˜ao2 condi¸c˜ao1 V V if ((condi¸c~ao1 || condi¸c~ao2) && !(condi¸c~ao1 && condi¸c~ao2)) comando1; Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 34 / 38
  • 138. Ou Exclusivo Verdadeiro se ou uma das condi¸c˜oes ´e verdadeira ou a outra ´e, nunca as duas ou nenhuma delas XOr: Comando1 ser´a executado? condi¸c˜ao2 condi¸c˜ao1 V V F if ((condi¸c~ao1 || condi¸c~ao2) && !(condi¸c~ao1 && condi¸c~ao2)) comando1; Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 34 / 38
  • 139. Ou Exclusivo Verdadeiro se ou uma das condi¸c˜oes ´e verdadeira ou a outra ´e, nunca as duas ou nenhuma delas XOr: Comando1 ser´a executado? condi¸c˜ao2 condi¸c˜ao1 V F V F if ((condi¸c~ao1 || condi¸c~ao2) && !(condi¸c~ao1 && condi¸c~ao2)) comando1; Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 34 / 38
  • 140. Ou Exclusivo Verdadeiro se ou uma das condi¸c˜oes ´e verdadeira ou a outra ´e, nunca as duas ou nenhuma delas XOr: Comando1 ser´a executado? condi¸c˜ao2 condi¸c˜ao1 V F V F V if ((condi¸c~ao1 || condi¸c~ao2) && !(condi¸c~ao1 && condi¸c~ao2)) comando1; Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 34 / 38
  • 141. Ou Exclusivo Verdadeiro se ou uma das condi¸c˜oes ´e verdadeira ou a outra ´e, nunca as duas ou nenhuma delas XOr: Comando1 ser´a executado? condi¸c˜ao2 condi¸c˜ao1 V F V F V F if ((condi¸c~ao1 || condi¸c~ao2) && !(condi¸c~ao1 && condi¸c~ao2)) comando1; Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 34 / 38
  • 142. Ou Exclusivo Verdadeiro se ou uma das condi¸c˜oes ´e verdadeira ou a outra ´e, nunca as duas ou nenhuma delas XOr: Comando1 ser´a executado? condi¸c˜ao2 condi¸c˜ao1 V F V F V F V if ((condi¸c~ao1 || condi¸c~ao2) && !(condi¸c~ao1 && condi¸c~ao2)) comando1; Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 34 / 38
  • 143. Ou Exclusivo Verdadeiro se ou uma das condi¸c˜oes ´e verdadeira ou a outra ´e, nunca as duas ou nenhuma delas XOr: Comando1 ser´a executado? condi¸c˜ao2 condi¸c˜ao1 V F V F V F V F if ((condi¸c~ao1 || condi¸c~ao2) && !(condi¸c~ao1 && condi¸c~ao2)) comando1; Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 34 / 38
  • 144. Arquivos Aten¸c˜ao! Nessa aula n˜ao discutimos sobre arquivos que contˆem todo o leque de caracteres Unicode ou mesmo todas as extens˜oes do ASCII. Focamos apenas em arquivos ASCII “puros”. Aqueles que, contudo, procuram esse tipo de informa¸c˜ao, podem dar uma olhada na classe java.io.OutputStreamWriter sobre como criar um Writer levando em conta a codifica¸c˜ao dos caracteres do arquivo. Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 35 / 38
  • 145. Videoaula https://www.youtube.com/watch?v=dHou1G8iYo4 e https://www.youtube.com/watch?v=4WYyd7MNDqQ (cobrem parcialmente o conte´udo) Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 36 / 38
  • 147. Referˆencias Adicionais http://download.oracle.com/javase/tutorial/ essential/exceptions/index.html Horstmann, C.S.; Cornell, G.: Core Java 2: Volume I - Fundamentals. Prentice Hall. 2002. http://www3.ntu.edu.sg/home/ehchua/programming/ java/J5a_Exception.html Bloch, J.: Effective Java: Programming Language Guide. Addison-Wesley. 2001. http://download.oracle.com/javase/tutorial/java/ nutsandbolts/op3.html Norton Trevisan Roman Aula 23 – Arquivos e Exce¸c˜oes 29 de maio de 2020 38 / 38