Olá a todos hoje falaremos de manipulação de arquivos, uma situação muito utilizada seja para persistência de dados como arquivos de cofiguração, relatórios simples, armazenamento para transferência de dados ou em até alguns casos pequenas bases de dados (para armazenamento de um grande volume de informações dê preferência aos DBMS, mesmo em dispositivos móveis com as versões compacts).
A classe File
É com ela que iremos trabalhar para manipular arquivos:File arq = new File(“c:\\programero\\arquivo.txt”);
if (!arq.exists()){
System.out.println(“Arquivo não existe !”);
}
Na classe File temos os métodos:
getName | Retorna o nome do arquivo. |
renameTo | Renomeia o arquivo. |
exists | Verifica se o arquivo existe. |
canWrite | Verifica se é possível escrevet no arquivo. |
canRead | Verifica se um arquivo pode ser lido. |
isFile | Verifica se o caminho definido é um arquivo. |
lastModified | Recupera a data da última alteração do arquivo. |
length | Tamanho do arquivo. |
delete | Deleta o arquivo. |
getPath | Retorna o nome do diretório. |
getAbsolutePath | Nome completo do diretório. |
getParent | Retorna os diretórios acima do arquivo. |
isDirectory | Verifica se o caminho definido é um diretório. |
isAbsolute | Verifica se o caminho é absoluto. |
mkDir | Cria um diretório. |
list | Lista arquivo no diretório. |
Para ler e gravar dados nos arquivos utilizamos classes para tratamento de stream:
Classe | Descrição |
Reader | Streams de entrada de caracteres. |
Writer | Streams de saída de caracteres. |
InputStream | Streams de entrada de bytes. |
OutputStream | Streams de saída de bytes, são manipulados por subclasses. |
FileReader | Leitura de caracteres de um arquivo. |
FileWriter | Escrita de caracteres em arquivo. |
FileInputStream | Serialização de objeto. |
FileOutPutStream | Deserializar objeto. |
Exemplos:
Primeiro:
package programero.blog;
import java.io.*;
public class Arquivos1 {
/**
* Exemplo de leitura de arquivos
* http://programero.blogspot.com/
*/
//
public static void lerArquivo(String arquivo){
File f = new File(arquivo);
if (!f.exists()){
System.out.println("Arquivo " + arquivo + " não existe!");
return;
}
try{
//
// is representa um fluxo de entrada a partir de um arquivo
InputStream is = new FileInputStream(arquivo);
//
//InputStreamReader é uma classe para converter os bytes em char
InputStreamReader isr = new InputStreamReader(is);
//
//BufferedReader é uma classe para armazenar os chars em memoria
BufferedReader br = new BufferedReader(isr);
String s = br.readLine(); //primeira linha
//
while (s != null){
System.out.println(s);
s = br.readLine();
}
}catch(Exception x){
System.out.println(x.getMessage());
}
}
public static void main(String[] args) {
lerArquivo("c:\\programero\\ler.txt");
}
}
Segundo:
package programero.blog;
import java.io.*;
public class Arquivos2 {
/**
* Exemplo de escrita de arquivos
* http://programero.blogspot.com/
*/
//
public static void copiarArquivo(){
//
//lendo linhas
try{
FileReader i = new FileReader("c:\\programero\\ler.txt");
FileWriter o = new FileWriter("c:\\programero\\Gravar.txt");
BufferedReader in = new BufferedReader(i);
PrintWriter out= new PrintWriter(o);
String Linha;
//
while ((Linha = in.readLine()) != null){
System.out.println(Linha);
out.println(Linha);
}
//
out.flush();
i.close();
o.close();
}catch (Exception x){
System.out.println(x.getMessage());
}
}
public static void main(String[] args) {
copiarArquivo();
}
}
Bom por enquanto é só, qualquer dúvida é postar um comentário que tentamos ajudar, nós próximos posts colocaremos alguns exemplos de interação com banco de dados.
Excelente post Eduardo. Já mexi com Java(não profissionalmente) e sei como é difícil para o novatos(ainda sou um). Seu post está muito bem explicado, bem "mastigado", hehehe. Alto e avante na blogosfera ;-)
ResponderExcluirE aí Eduardo!! Bão né?!
ResponderExcluirTe falar você tem MSN? Não sei se ja te perguntei isso hehe.. Se tiver me adiciona: betaopo@hotmail.com
Abraço!
Eduardo, não entendo lhufas de "informatiquês". Sou aquela usuária que ainda pergunta o óbvio e vive brigando com o micro achando que ele faz birra quando consegue fazer alguma coisa.
ResponderExcluirMas vim até aqui pra dizer que estou muito feliz por ter você como seguidor do meu blog.
É sempre bom saber que jovens talentosos e "modernos" como você param para ler coisas que uma senhora escreve. Obrigada.
Angela
Muchasplatas que bom que tenha gostado, qualquer dúvida nos pergunte, Beto já está adicionado e Angel abrigado pelos elogios e volte sempre...
ResponderExcluirOlá, Eduardo! Como vai?Eu gostei muito de seu post sobre arquivos, com ele pude esclarecer alumas dúvidas que me deixavam confusa sobre os fluxos de escrita e leitura. Você comentou que iria postar a respeito dainteração de arquivos com o banco, então, talvez possa me ajudar...tenho que ler uma tabela do banco de dadose transformar seu conteúdo em um arquivo txt que será meu propertie par a criação de uma árvore dinâmica do richFaces, mas não estou teno meito sucesso na passagem dos dados através do meu método getList que, na verdade, executa e retorna o resultado de uma consulta ao banco...Devo passar os valores do banco um a um? Como ocorre exatamente a interação entre a lista retornada e os métodos de escrita do arquivo? O banco que estou usando é o postgres e meu framework é o eclipse.Ah, caso tenha alguma idéia: como faço pra alterar os ícones que aparecem na árvore do richFaces, eu não quero que apareçam páginas oupastas para indicar os diretórios e arquivos, como é o padrão...
ResponderExcluirGrata pela atenção,
Hikaro
Olá Hikaro, fico feliz que de alguma forma eu tenha lhe ajudado, peço desculpas pela demora na resposta (estou bem atarefado com projetos do trabalho) quanto as suas perguntas infelizmente acredito que não poderei ajudá-la, pois não conheço o richFaces, dei uma breve pesquisada na internet e achei bem interessante, assim que as coisas derem uma acalmada para mim (não creio que isso ocorra tão cedo) irei dar uma estudada nele mais afundo, por enquanto deixo aqui apenas dois links, um que você provavelmente já conhece http://www.jboss.org/file-access/default/members/jbossrichfaces/freezone/docs/devguide/en/html_single/index.html , e outro que talvez lhe ajude em algo, ao menos na questão das figuras, espero que continue a nos visitar, abraços...
ResponderExcluiralguem pode me ajudar a resolver alguns exercicios de repetição JAVA? todos tem k ser feitos em WHILE.
ResponderExcluirOlá anônimo o uso do WHILE é simples:
ResponderExcluirclass WhileDemo {
public static void main(String[] args){
int count = 1;
while (count < 11) {
System.out.println("Count is: " + count);
count++;
}
}
}
Nos diga do que você precisa e tentaremos te ajudar...
Boa noit
ResponderExcluirqueria gravar caracteres a partir de um ponto no arquivo como faco?
queria gravar um projeto qe to fazendo em algum .txt, queria saber onde implementar esses codigos para ele começar a salvar os dados digitados pelo usuario em .txt
ResponderExcluirfiz uma classe Main onde todas as operações sao realizada.
codigo:
public class Main {
public static void main(String[] args)
{
int op, cont=0, cont_autor = 0;
Aluno al[];
al= new Aluno[5];
Autor au[];
au = new Autor[5];
do
{
op = Tela.scanInt("Systema de Bíblioteca...\n1- Console Aluno \n2-Console Autor"
+"\n3- Console Livro.");
switch (op)
{
case 1:
{
int op2 = Tela.scanInt("Systema de Bíblioteca...\n1-Cadastro Aluno\n2-Consultar Todos Alunos"
+"\n3- Consultar Matricula Específica.\n 4- Alterar Status Matricula");
switch (op2)
{
case 1:
{
al[cont] = new Aluno();
cont++;
break;
} // fexa case 1
case 2:
{
for(int i =0;i<cont;i++)
al[i].print();
break;
} // fexa case 2
case 3:
{
int aux_m;
aux_m = Tela.scanInt("Informe a matrícula do aluno.");
for(int i=0;i<cont;i++)
{
if(aux_m == al[i].getMatricula())
{
al[i].print();
}else{Tela.print("Matricula não encontrada.");}
}
break;
} // fexa case 3
case 4:
{
int aux_m, ope=0;
aux_m = Tela.scanInt("Informe a matrícula do aluno.");
for (int i=0;i<cont;i++)
{
if(aux_m == al[i].getMatricula())
{
Tela.print("Status da Matrícula:"+al[i].StatusMatricula());
ope = Tela.scanInt("Alterar Status da matrícula para:\n1 - Matriculado.\n2- Não Matriculado.");
if (ope == 1)
{
al[i].matriculado();
Tela.print("Status da Matricula alterado para: "+al[i].StatusMatricula());
}else
{
al[i].NaoMatriculado();
}
}else{Tela.print("Matricula não encontrada.");}
}// fexa FOR
} // fexa case 4 OP
} // fexa switch do OP2
break;
} // fexa switch: CASE 1 do OP
case 2: // CASE OP - Autores
{
int op2 = Tela.scanInt("Systema de Bíblioteca...\n1-Cadastro Autor\n2-Consultar Todos Autores"
+"\n3- Consultar Autor específico.\n");
switch (op2)
{
case 1:
{
au[cont_autor] = new Autor();
cont_autor++;
break;
}
}
} // fexa CASE 2 do OP
}
}while(true);
}
}
queria saber onde coloco os cogidos. e se no meio do codigo é preciso colocar alguma função para ele salvar