Pular para o conteúdo principal

Manipulando Arquivos no Java

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.

Comentários

  1. 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 ;-)

    ResponderExcluir
  2. E aí Eduardo!! Bão né?!
    Te falar você tem MSN? Não sei se ja te perguntei isso hehe.. Se tiver me adiciona: betaopo@hotmail.com
    Abraço!

    ResponderExcluir
  3. 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.
    Mas 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

    ResponderExcluir
  4. Muchasplatas que bom que tenha gostado, qualquer dúvida nos pergunte, Beto já está adicionado e Angel abrigado pelos elogios e volte sempre...

    ResponderExcluir
  5. Olá, 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...
    Grata pela atenção,
    Hikaro

    ResponderExcluir
  6. 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...

    ResponderExcluir
  7. alguem pode me ajudar a resolver alguns exercicios de repetição JAVA? todos tem k ser feitos em WHILE.

    ResponderExcluir
  8. Olá anônimo o uso do WHILE é simples:

    class 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...

    ResponderExcluir
  9. Boa noit
    queria gravar caracteres a partir de um ponto no arquivo como faco?

    ResponderExcluir
  10. 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

    fiz 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

    ResponderExcluir

Postar um comentário

Obrigado por Participar do programero, fique a vontade para agradecer, retificar, perguntar ou sugerir.

Mais visitadas

Funções de Data e Hora (Delphi)

É muito comum nos depararmos no dia a dia com a necessidade de manipular datas e horas, seja para um calculo de permanência, dias de atraso enfim, é praticamente escapar de alguma situação que necessite desse tipo de controle. Assim como a necessidade e se utilizar algum recurso para manipular as datas e horas de alguma maneira e freqüente, as duvidas de como o faze-lo também é, basta um breve olhar em qualquer fórum especializado e lá está, alguma duvida relacionada, por isso decidi falar um pouco sobre uma unit muito poderosa chamada DateUtils para a manipulação de data e hora, com um grande numero de métodos e classes que facilitam a vida de qualquer um. Alguns exemplos: CompareDate(constA, B: TDateTime): TValueRelationship; Compara apenas a data de dois valores (do tipo TDateTime) retornando: LessThanValue O primeiro valor é menor que o segundo EqualsValue Os valores são iguais GreaterThanValue O primeiro valor é maior que o segundo CompareDateTime(const A, B: TD

Funções de data Oracle

  Com o Oracle é possível obter uma série de resultados a partir de uma ou mais datas, como por exemplo verificar o último dia do mês ou verificar a quantidade de meses entre duas datas, então vamos a alguns exemplos:   Data atual do sistema: SYSDATE Remover meses de uma data: ADD_MONTHS(SYSDATE, -1) Adicionar meses de uma data: ADD_MONTHS(SYSDATE, +1) Buscar o último dia do mês: LAST_DAY(SYSDATE) Primeiro dia do mês: TRUNC(SYSDATE, ‘MONTH’) Quantidade de meses entre duas datas: MONTHS_BETWEEN(SYSDATE, ‘27/07/1982’) Primeiro dia do ano: TRUNC(SYSDATE, ‘YEAR’) Dias da semana: DECODE( TO_NUMBER( TO_CHAR          (SYSDATE, ‘D’) ) ,1, ‘domingo’ ,2, ‘segunda-feira’ ,3, ‘terça-feira’ ,4, ‘quarta-feira’ ,5, ‘quinta-feira’ ,6, ‘sexta-feira’ ,7,’sábado’ )

Iniciar e Parar Serviços do Windows (Delphi)

Em certas ocasiões nos deparamos com a necessidade de manipular determinadas atividades do SO, como iniciar ou parar um banco de dados, ou qualquer outro serviço que esteja funcionando no momento. Segue abaixo um código que encontrei na Internet para tal finalidade (não me recordo à fonte, assim que eu a encontrar colocarei). Iniciar Serviço: uses WinSvc; // // start service // // return TRUE if successful // // sMachine: //   machine name, ie: \SERVER //   empty = local machine // // sService //   service name, ie: Alerter // function ServiceStart(   sMachine,   sService : string ) : boolean; var   //   // service control   // manager handle   schm,   //   // service handle   schs   : SC_Handle;   //   // service status   ss     : TServiceStatus;   //   // temp char pointer   psTemp : PChar;   //   // check point   dwChkP : DWord; begin   ss.dwCurrentState := -1;   //