- Java Leitura e Escrita em Arquivos
- Exemplos: TXT, CSV e JSON
- Atividade Prática de Arquivos
- Java Acesso a Bancos de Dados PostgreSQL
- Operações DDL no PostgreSQL
- Operações CRUD no PostgreSQL
- Exemplo de Sistema CRUD
- Atividades Práticas de Banco de Dados
- File Input/Output (I/O) é fundamental para interagir com o sistema de arquivos.
- Permite que programas Java leiam dados de arquivos e escrevam dados em arquivos.
- Java fornece diversas classes e APIs para manipular arquivos.
- A API de I/O do Java está principalmente no pacote
java.io. - Duas categorias principais de streams:
- Byte Streams: Usados para ler e escrever dados brutos (bytes). Classes como
InputStreameOutputStream. - Character Streams: Usados para ler e escrever dados de caracteres (texto). Classes como
ReadereWriter.
- Byte Streams: Usados para ler e escrever dados brutos (bytes). Classes como
- Classes importantes para manipulação de arquivos:
File: Representa um arquivo ou diretório no sistema de arquivos.FileReader: Reader para ler arquivos de texto.FileWriter: Writer para escrever em arquivos de texto.BufferedReader: Reader que armazena em buffer caracteres, proporcionando leitura eficiente.BufferedWriter: Writer que armazena em buffer caracteres, proporcionando escrita eficiente.
- Utilize as classes
FileReadereBufferedReaderpara ler arquivos de texto linha por linha.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class LerTXT {
public static void main(String[] args) {
String nomeArquivo = "exemplo.txt";
try (BufferedReader br = new BufferedReader(new FileReader(nomeArquivo))) {
String linha;
while ((linha = br.readLine()) != null) {
System.out.println(linha);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}- Utilize as classes
FileWritereBufferedWriterpara escrever texto em arquivos.
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class EscreverTXT {
public static void main(String[] args) {
String nomeArquivo = "saida.txt";
try (BufferedWriter bw = new BufferedWriter(new FileWriter(nomeArquivo))) {
bw.write("Esta é a primeira linha.");
bw.newLine();
bw.write("Esta é a segunda linha.");
} catch (IOException e) {
e.printStackTrace();
}
}
}- CSV (Comma Separated Values) é um formato comum para dados tabulares.
- Uma maneira simples de ler é usar
BufferedReadere dividir cada linha pela vírgula. - Para um tratamento mais robusto (lidar com aspas, separadores diferentes), bibliotecas como Apache Commons CSV são recomendadas.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class LerCSVSimples {
public static void main(String[] args) {
String nomeArquivo = "dados.csv";
try (BufferedReader br = new BufferedReader(new FileReader(nomeArquivo))) {
String linha;
while ((linha = br.readLine()) != null) {
String[] campos = linha.split(",");
System.out.println("Nome: " + campos[0] + ", Idade: " + campos[1]);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}- Dependência (Maven):
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.10.0</version>
</dependency>- Esta biblioteca facilita o parsing de arquivos CSV.
import org.apache.commons.csv.*;
import java.io.*;
public class LerCSVCommons {
public static void main(String[] args) throws IOException {
try (Reader in = new FileReader("dados.csv")) {
Iterable<CSVRecord> records = CSVFormat.DEFAULT.withHeader("Nome", "Idade").parse(in);
for (CSVRecord record : records) {
String nome = record.get("Nome");
String idade = record.get("Idade");
System.out.println("Nome: " + nome + ", Idade: " + idade);
}
}
}
}- Similar à leitura, você pode usar
BufferedWritere formatar as linhas com vírgulas. - Apache Commons CSV também oferece funcionalidades para escrita.
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class EscreverCSVSimples {
public static void main(String[] args) {
String nomeArquivo = "saida.csv";
String[][] dados = {{"João", "30"}, {"Maria", "25"}};
try (BufferedWriter bw = new BufferedWriter(new FileWriter(nomeArquivo))) {
for (String[] linha : dados) {
bw.write(String.join(",", linha));
bw.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}import org.apache.commons.csv.*;
import java.io.*;
public class EscreverCSVCommons {
public static void main(String[] args) throws IOException {
try (FileWriter out = new FileWriter("saida.csv")) {
try (CSVPrinter printer = new CSVPrinter(out, CSVFormat.DEFAULT.withHeader("Nome", "Idade"))) {
printer.printRecord("Carlos", 35);
printer.printRecord("Ana", 28);
}
}
}
}- JSON (JavaScript Object Notation) é um formato popular para troca de dados.
- Java não possui uma API nativa completa para JSON. Bibliotecas como Jackson ou Gson são comumente usadas.
- Dependência Jackson (Maven):
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.0</version>
</dependency>- Dependência Gson (Maven):
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.io.IOException;
public class LerJSONJackson {
public static void main(String[] args) {
try {
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(new File("dados.json"));
String nome = rootNode.get("nome").asText();
int idade = rootNode.get("idade").asInt();
System.out.println("Nome: " + nome + ", Idade: " + idade);
} catch (IOException e) {
e.printStackTrace();
}
}
}import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class EscreverJSONJackson {
public static void main(String[] args) {
try {
ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
Map<String, Object> data = new HashMap<>();
data.put("nome", "Carlos");
data.put("idade", 35);
mapper.writeValue(new File("saida.json"), data);
} catch (IOException e) {
e.printStackTrace();
}
}
}- Crie um programa Java que:
- Leia um arquivo TXT chamado
entrada.txt, onde cada linha contém o nome de uma pessoa. - Crie um novo arquivo CSV chamado
nomes.csvcom duas colunas: "Nome" e "Tamanho". - Para cada nome lido do arquivo TXT, escreva no arquivo CSV o nome e o tamanho da string do nome.
- Leia o arquivo
nomes.csve imprima no console cada linha.
- Leia um arquivo TXT chamado
- JDBC (Java Database Connectivity) é uma API Java para interagir com bancos de dados.
- Para conectar ao PostgreSQL, precisamos do driver JDBC específico.
- Dependência PostgreSQL JDBC (Maven):
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.2</version>
</dependency>- Utilize a classe
DriverManagerpara obter uma conexão. - A URL de conexão para PostgreSQL geralmente segue o formato:
jdbc:postgresql://host:port/database. - Você precisará do nome de usuário e senha para autenticação.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConectarPostgreSQL {
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/meubanco";
String usuario = "meuusuario";
String senha = "minhasenha";
try (Connection conexao = DriverManager.getConnection(url, usuario, senha)) {
System.out.println("Conexão bem-sucedida!");
} catch (SQLException e) {
e.printStackTrace();
}
}
}- DDL são comandos para definir a estrutura do banco de dados.
- Inclui operações como criar, alterar e excluir bancos de dados e tabelas.
- Cria um novo banco de dados no servidor PostgreSQL.
- Comando SQL:
CREATE DATABASE nome_do_banco;.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class CriarBanco {
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/"; // Conectar sem especificar o banco
String usuario = "postgres"; // Usuário padrão
String senha = "suasenha";
String nomeBanco = "novobanco";
try (Connection conexao = DriverManager.getConnection(url, usuario, senha);
Statement statement = conexao.createStatement()) {
String sql = "CREATE DATABASE " + nomeBanco;
statement.executeUpdate(sql);
System.out.println("Banco de dados '" + nomeBanco + "' criado com sucesso!");
} catch (SQLException e) {
e.printStackTrace();
}
}
}- Remove um banco de dados existente do servidor PostgreSQL.
- Comando SQL:
DROP DATABASE nome_do_banco;. - Cuidado: Esta operação é irreversível e apaga todos os dados.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class ExcluirBanco {
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/";
String usuario = "postgres";
String senha = "suasenha";
String nomeBanco = "novobanco";
try (Connection conexao = DriverManager.getConnection(url, usuario, senha);
Statement statement = conexao.createStatement()) {
String sql = "DROP DATABASE IF EXISTS " + nomeBanco; // IF EXISTS evita erros se o banco não existir
statement.executeUpdate(sql);
System.out.println("Banco de dados '" + nomeBanco + "' excluído com sucesso!");
} catch (SQLException e) {
e.printStackTrace();
}
}
}- Seleciona o banco de dados que será utilizado para as operações subsequentes.
- Em JDBC, o banco de dados é geralmente especificado na URL de conexão.
- Exemplo de URL:
jdbc:postgresql://localhost:5432/nome_do_banco.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class UsarBanco {
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/meubanco";
String usuario = "meuusuario";
String senha = "minhasenha";
try (Connection conexao = DriverManager.getConnection(url, usuario, senha)) {
System.out.println("Conectado ao banco de dados 'meubanco'.");
} catch (SQLException e) {
e.printStackTrace();
}
}
}- Cria uma nova tabela dentro do banco de dados selecionado.
- Comando SQL:
CREATE TABLE nome_da_tabela (coluna1 tipo restrições, coluna2 tipo restrições, ...);.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class CriarTabela {
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/meubanco";
String usuario = "meuusuario";
String senha = "minhasenha";
try (Connection conexao = DriverManager.getConnection(url, usuario, senha);
Statement statement = conexao.createStatement()) {
String sql = "CREATE TABLE pessoas (" +
"id SERIAL PRIMARY KEY," +
"nome VARCHAR(50) NOT NULL," +
"idade INTEGER" +
");";
statement.executeUpdate(sql);
System.out.println("Tabela 'pessoas' criada com sucesso!");
} catch (SQLException e) {
e.printStackTrace();
}
}
}- Remove uma tabela existente do banco de dados.
- Comando SQL:
DROP TABLE nome_da_tabela;. - Cuidado: Apaga todos os dados da tabela.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class ExcluirTabela {
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/meubanco";
String usuario = "meuusuario";
String senha = "minhasenha";
String nomeTabela = "pessoas";
try (Connection conexao = DriverManager.getConnection(url, usuario, senha);
Statement statement = conexao.createStatement()) {
String sql = "DROP TABLE IF EXISTS " + nomeTabela;
statement.executeUpdate(sql);
System.out.println("Tabela '" + nomeTabela + "' excluída com sucesso!");
} catch (SQLException e) {
e.printStackTrace();
}
}
}- Remove todos os dados de uma tabela, mas mantém a estrutura da tabela.
- Comando SQL:
TRUNCATE TABLE nome_da_tabela;. - Mais rápido que
DELETE FROM tabela;para remover todos os registros.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class TruncarTabela {
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/meubanco";
String usuario = "meuusuario";
String senha = "minhasenha";
String nomeTabela = "pessoas";
try (Connection conexao = DriverManager.getConnection(url, usuario, senha);
Statement statement = conexao.createStatement()) {
String sql = "TRUNCATE TABLE " + nomeTabela;
statement.executeUpdate(sql);
System.out.println("Tabela '" + nomeTabela + "' truncada com sucesso!");
} catch (SQLException e) {
e.printStackTrace();
}
}
}- Modifica a estrutura de uma tabela existente (adicionar, remover, alterar colunas, etc.).
- Comando SQL:
ALTER TABLE nome_da_tabela operação;. - Exemplos de operações:
ADD COLUMN,DROP COLUMN,ALTER COLUMN.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class AlterarTabela {
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/meubanco";
String usuario = "meuusuario";
String senha = "minhasenha";
String nomeTabela = "pessoas";
String nomeColuna = "email";
try (Connection conexao = DriverManager.getConnection(url, usuario, senha);
Statement statement = conexao.createStatement()) {
String sql = "ALTER TABLE " + nomeTabela + " ADD COLUMN " + nomeColuna + " VARCHAR(100);";
statement.executeUpdate(sql);
System.out.println("Coluna '" + nomeColuna + "' adicionada à tabela '" + nomeTabela + "' com sucesso!");
} catch (SQLException e) {
e.printStackTrace();
}
}
}- CRUD são as quatro operações básicas para manipular dados em um banco de dados.
- Create (Criar): Adicionar novos registros à tabela.
- Read (Ler): Recuperar registros da tabela.
- Update (Atualizar): Modificar registros existentes na tabela.
- Delete (Excluir): Remover registros da tabela.
- Adiciona um novo registro à tabela.
- Comando SQL:
INSERT INTO nome_da_tabela (coluna1, coluna2, ...) VALUES (valor1, valor2, ...);.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class InserirPessoa {
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/meubanco";
String usuario = "meuusuario";
String senha = "minhasenha";
String nome = "Ricardo";
int idade = 40;
try (Connection conexao = DriverManager.getConnection(url, usuario, senha);
PreparedStatement pstmt = conexao.prepareStatement("INSERT INTO pessoas (nome, idade) VALUES (?, ?)")) {
pstmt.setString(1, nome);
pstmt.setInt(2, idade);
int linhasAfetadas = pstmt.executeUpdate();
System.out.println(linhasAfetadas + " linha(s) inserida(s) com sucesso!");
} catch (SQLException e) {
e.printStackTrace();
}
}
}- Recupera registros da tabela com base em critérios específicos (ou todos).
- Comando SQL:
SELECT coluna1, coluna2, ... FROM nome_da_tabela WHERE condição;.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class ListarPessoas {
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/meubanco";
String usuario = "meuusuario";
String senha = "minhasenha";
try (Connection conexao = DriverManager.getConnection(url, usuario, senha);
Statement statement = conexao.createStatement();
ResultSet resultado = statement.executeQuery("SELECT id, nome, idade FROM pessoas")) {
while (resultado.next()) {
int id = resultado.getInt("id");
String nome = resultado.getString("nome");
int idade = resultado.getInt("idade");
System.out.println("ID: " + id + ", Nome: " + nome + ", Idade: " + idade);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}- Modifica registros existentes na tabela.
- Comando SQL:
UPDATE nome_da_tabela SET coluna1 = novo_valor, coluna2 = novo_valor WHERE condição;.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class AtualizarPessoa {
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/meubanco";
String usuario = "meuusuario";
String senha = "minhasenha";
String novoNome = "Ricardo Silva";
int idParaAtualizar = 1;
try (Connection conexao = DriverManager.getConnection(url, usuario, senha);
PreparedStatement pstmt = conexao.prepareStatement("UPDATE pessoas SET nome = ? WHERE id = ?")) {
pstmt.setString(1, novoNome);
pstmt.setInt(2, idParaAtualizar);
int linhasAfetadas = pstmt.executeUpdate();
System.out.println(linhasAfetadas + " linha(s) atualizada(s) com sucesso!");
} catch (SQLException e) {
e.printStackTrace();
}
}
}- Remove registros da tabela.
- Comando SQL:
DELETE FROM nome_da_tabela WHERE condição;. - Para remover todos os registros:
DELETE FROM nome_da_tabela;.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class ExcluirPessoa {
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/meubanco";
String usuario = "meuusuario";
String senha = "minhasenha";
int idParaExcluir = 1;
try (Connection conexao = DriverManager.getConnection(url, usuario, senha);
PreparedStatement pstmt = conexao.prepareStatement("DELETE FROM pessoas WHERE id = ?")) {
pstmt.setInt(1, idParaExcluir);
int linhasAfetadas = pstmt.executeUpdate();
System.out.println(linhasAfetadas + " linha(s) excluída(s) com sucesso!");
} catch (SQLException e) {
e.printStackTrace();
}
}
}- Uma aplicação CRUD típica teria classes ou métodos para cada operação:
criarPessoa(String nome, int idade): Insere uma nova pessoa no banco.lerPessoa(int id): Recupera uma pessoa pelo ID.listarTodasPessoas(): Recupera todas as pessoas do banco.atualizarPessoa(int id, String novoNome, int novaIdade): Atualiza os dados de uma pessoa.excluirPessoa(int id): Remove uma pessoa pelo ID.
- Cada método utilizaria a API JDBC para executar os comandos SQL correspondentes.
- Poderia haver uma classe para representar a entidade "Pessoa" para facilitar a manipulação dos dados.
- Crie um programa Java que:
- Tente criar um banco de dados chamado
escola. - Se o banco de dados já existir, tente excluí-lo e criá-lo novamente.
- Conecte-se ao banco de dados
escola. - Crie uma tabela chamada
alunoscom as seguintes colunas:id(inteiro, chave primária, auto incremento)nome(texto, não nulo)matricula(texto, único)
- Adicione uma coluna chamada
curso(texto) à tabelaalunos. - Remova a coluna
matriculada tabelaalunos. - Trunque a tabela
alunos. - Exclua a tabela
alunos.
- Tente criar um banco de dados chamado
- Crie um programa Java que:
- Conecte-se ao banco de dados
escola(assuma que a tabelaalunoscom as colunasid,nome,cursoexiste). - Insira três registros de alunos na tabela
alunos. - Liste todos os alunos cadastrados, mostrando seus IDs, nomes e cursos.
- Atualize o curso do aluno com o ID específico.
- Liste novamente todos os alunos para verificar a atualização.
- Exclua o aluno com um ID específico.
- Liste mais uma vez todos os alunos para verificar a exclusão.
- Conecte-se ao banco de dados