Home Fundamentos de IO em Java
Post
Cancelar

Fundamentos de IO em Java

Baseado nos cursos da Softblue

API de I/O do Java

  • Está localizada no pacote java.io

  • A API de I/O gerencia a entrada e saída de dados

– Console, arquivos, sockets, etc.

  • Todas as operações de I/O são baseadas em fluxo de dados (streams)

– InputStream: fluxo de entrada

– OutputStream: fluxo de saída

  • A API usa polimorfismo para esconder detalhes de onde a informação vem e para onde ela vai

  • Pelas streams, trafegam bytes

– InputStream: é capaz de ler bytes de algum lugar

1
2
3
4
5
InputStream is = new FileInputStream("entrada.txt");
int b = is.read();

InputStream is = System.in;
int b = is.read();

– OutputStream: é capaz de escrever bytes em algum lugar

1
2
3
4
5
OutputStream os = new FileOutputStream("saida.txt");
os.write(65);

OutputStream os = System.out;
os.write(65);

Lendo caracteres

  • Para lermos caracteres, devemos usar uma “ponte”, que converte bytes em caracteres

InputStream lê bytes - InputStreamReader lê caracteres

1
2
3
InputStream is = new FileInputStream("entrada.txt");
InputStreamReader isr = new InputStreamReader(is);
char c = (char) isr.read();

Lendo Strings

  • Para lermos strings, devemos usar um objeto que consegue juntar os caracteres

InputStreamReader lê caracteres - BufferedReader lê strings

1
2
3
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String s = br.readLine();

Escrevendo caracteres e strings

OutputStream - OutputStreamWriter - BufferedWriter

1
2
3
4
OutputStream os = new FileOutputStream("saida.txt");
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
bw.write("texto");

Streams em Arquivos

  • É possível usar também as classes FileReader e FileWriter para lermos e escrevermos arquivos texto
1
2
3
4
5
Reader r = new FileReader("entrada.txt");//Caracteres
Writer w = new FileWriter("saida.txt");

BufferedReader br = new BufferedReader(r);//Strings
BufferedWriter bw = new BufferedWriter(w);

Scanner e PrintStream

  • Servem para facilitar o trabalho de ler e escrever dados em streams

– Scanner: lê dados de uma stream de entrada

1
2
3
4
Scanner s = new Scanner(new FileInputStream("entrada.txt"));//Pode ser utilizado qualquer InputStream ou Reader

while(s.hasNextLine()) {
	String token = s.nextLine();//Possibilidade de trabalhar com tokens
  • O Scanner possui facilidades para quebrar strings com base em delimitadores

– PrintStream: escreve dados em uma stream de saída

1
2
3
PrintStream ps = new PrintStream(new FileOutputStream("saida.txt"));//Pode ser utilizada qualquer OutputStream

ps.println("texto");//Os métodos print() e println() facilitam a escrita de dados
  • System.out é uma PrintStream

A classe java.io.File

  • Permite acesso às informações sobre um arquivo ou diretório no sistema de arquivos

– nome, diretório, tamanho em bytes, permissões de escrita e leitura, etc.

  • Não representa obrigatoriamente um arquivo existente no sistema de arquivos
1
File f = new File("C:/Arquivos/arquivo.txt");
  • Alguns métodos importantes:
MétodoDescrição
isDirectory()Informa se é um arquivo ou um diretório
exists()Informa se o arquivo (ou diretório) existe
getName()Obtém o nome do arquivo ou diretório
getPath()Obtém o caminho completo do arquivo ou diretório
listFiles()Lista os arquivos de um diretório

Try-with-resources

  • Permite o fechamento automático de recursos (chamada ao método close())
1
2
3
4
5
6
7
8
9
10
11
12
13
InputStream is = null;
try {
	is = new FileInputStream("entrada.txt");
	...
} finally {
	if (is != null) {
		is.close();
	}
}

try (InputStream is = new FileInputStream("entada.txt")) { //Closeable ou AutoCloseable
	...
}
Esta postagem está licenciada sob CC BY 4.0 pelo autor.