Manipulação de Arquivos

Duvida no seguinte exercicio. Deverá ser desenvolvida uma aplicação capaz de ler
um arquivo de texto contendo uma quantidade de palavras maior que zero. Um exemplo de tal
arquivo pode ser visto logo abaixo:

11
emolument: profit, gain. SUB
palindrome: a word or phrase that reads the same backward as forward. SUB
deprecate: to disapprove of strongly. VERBO
bivouac: an encampment for the night. SUB
umbrage: suspicion of injury or wrong; offense. SUB
incipient: beginning to be; commencing; initial. ADJ
dapple: a small spot or blotch. SUB
pugnacious: inclined to fighting. ADJ
capitulate: to surrender under agreed conditions. VERBO
susurrus: a whisper; a murmur; a rustling. SUB
thaumaturgy: magic. SUB
A primeira linha do arquivo contém seu tamanho (em termo do número de linhas restantes).
As linhas subseqüentes apresentam a seguinte estrutura:
palavra: significado1;…;significadoN. classe

O exercio fala de um dicionario. onde a palavra ate o os : representa o vocabulo, a frase apos os : pontos o significado, e a palavra apos o . a classe gramatical

Como ler no arquivo de texto o vocabulo, significado e classe gramatical
e separar em variaveis.

http://www.guj.com.br/java.tutorial.artigo.13.1.guj

tu vai pegar cada linha e procurar por esses caracteres especiais, qaundo vc achar um pego o intervalo e preeche o objeto… :wink:

cara o artigo ta com erro neste trecho de codigo

String linha = null;
while ((linha = leitor.readLine())) {
System.out.println("Linha: " + linha);
}

ai segue minha classe

import java.awt.;
import java.io.
;
import java.util.*;

public class Arquivos {

public Arquivos() {

}

public void lerArquivos() throws FileNotFoundException {
    File file = new File("C://teste.txt");
    File noDiretorioAtual = new File("teste.txt");
    FileReader reader = new FileReader(new File("teste.txt"));
    BufferedReader leitor = new BufferedReader(reader);
    String linha = null;
    while ((linha = leitor.readLine())) {
        System.out.println("Linha: " + linha);
    }
}

}

try {
                             File arquivo = new File(nomeArquivo);
                              
                              BufferedReader br = new BufferedReader(new FileReader(arquivo));
                                                            
                              StringBuffer buf;
                              
                              String linha;
             
                              formatter = new SimpleDateFormat("ddMMyy");
           
                              linha = br.readLine();
                              
                              while (linha != null) {
                                  buf = new StringBuffer(linha);
                                  
                                  StringBuffer valor = new StringBuffer(buf.substring(255,266));
                                  
                                  valor.insert(9, '.');
                                  
                                  if((linha = br.readLine())==null)
                                      break;
                                  
                                  deposito.setValor(new Double(valor.toString()));
                                  log.debug("************************************************Valor: "+deposito.getValor());
                                  
                                  deposito.setData(formatter.parse(buf.substring(110, 116)));
                                  log.debug("************************************************Data: "+deposito.getData());
                                  
                                  deposito.setNumeroGRU(buf.substring(70, 80));
                                  log.debug("************************************************Numero GRU: "+deposito.getNumeroGRU());
                                  
                                  deposito.setDataCadastro(new Date());

nesse caso esta adaptado para minha solução, pq eu ja sei as posições e elas vao ser sempre as mesmas, mas no seu caso vc vai varrer a String linha e procurar por esses caracteres

da uma olhada nesse ultimo codigo e V se da pra fazer algo…:d

valew

mas ainda naum sei separar.

como varrer e separar as palavras?

public void lerArquivos() throws FileNotFoundException {

    File arquivo = new File("C://teste.txt");
    BufferedReader br = new BufferedReader(new FileReader(arquivo));
    StringBuffer buf;
    String linha;
    try {
        linha = br.readLine();
        Vocabulo vocabulo = new Vocabulo();

        while (linha != null) {
            buf = new StringBuffer(linha);

            if ((linha = br.readLine()) == null) {
                break;
            }
            vocabulo.setVocabulo(linha);
            vocabulo.setSignificado(linha);
            vocabulo.setSignificado(linha);
        }
    } 
    catch (Exception e) {
        System.out.print("Erro ao ler o arquivo");
    }
}

procura no indice da String[i].equals(";");

e assim por diante… :wink:

use o método slipt

ficará algo como:

String vet [] = new String[40];
String aux = “cuia : recepiente do mate”;
vet = aux.slipt(":");
System.out.println("Palavra: "+vet[0]);
System.out.println("Significado: " +vet[1]);

Aqui tem uso do slipt[http://www.guj.com.br/java.tutorial.artigo.183.1.guj]

Nossa cara valew mesmo!!!

daqui a pouco posto o código
Obrigado.

public class Dicionario {

public ListaDeVocabulos[] dicionario = new ListaDeVocabulos[26];
boolean contem;

public Dicionario() {
    for (int posicao = 0; posicao <= 25; posicao++) {
        dicionario[posicao] = new ListaDeVocabulos();
    }
}

//Metodo que insere as palavras no dicionario
public void inserirVocabulo(Vocabulo v) {
int posicao = this.getPosicao(v);

    if (!this.contem(v)) {
        if (posicao >= 0 && posicao <= 25) {
            dicionario[posicao].adicionarVocabulo(v);
        }
    } else { 
       System.out.print("A palavra" + dicionario[posicao] + "já existe no dicionário");
        System.out.println("\n");
     }
 }
 
 //Método que remove a palavra do dicionário,

public void removerVocabulo(Vocabulo v) {
    int posicao = this.getPosicao(v);//Busca a posição de acordo com a primeira letra da palavra

    if (!this.contem(v)) {//Caso a palavra não exista no dicionário entra no if.
        if (posicao >= 0 && posicao <= 25) {//Margem de segurança da posição do Array
           dicionario[posicao].deletarVocabulo(v);
         }
    }

}
//Método para imprimir as palavras
public void imprimir() {

    for (int posicao = 0; posicao <= 25; posicao++) {
         dicionario[posicao].imprimir();
    }

}

//Metodo que busca dados de uma determinada palavra
public void getDadosDaPalavra(Vocabulo v) {
    if (this.contem(v)) {
        int posicao = this.getPosicao(v);
        dicionario[posicao].imprimir();
        System.out.println("Posição:" + posicao);


    } else {//Caso a palavra não exista no dicionario, mostra a mensagem abaixo.
        System.out.println("\nA palavra '" + v.getVocabulo() + "' não existe");

    }

}

//Metodo que pega a posição da palavra
public int getPosicao(Vocabulo v) {
    int posicao = v.getVocabulo().toUpperCase().charAt(0) - 65;
    return posicao;
}

//metodo que verifica se existe a palavra
public boolean contem(Vocabulo v) {
    for (int posicao = 0; posicao < this.dicionario.length; posicao++) {
        if (this.dicionario[posicao].getLista().contains(v)) {
            contem = true;

        } else {
            contem = false;
        }
    }

    return contem;
}

}

import java.text.Collator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

public class ListaDeVocabulos {

public List<Vocabulo> lista = new ArrayList<Vocabulo>();
public static int NUMPALAVRAS = 0;

//Construtor com um parametro
public ListaDeVocabulos() {
   
}


//Metodo para adicionar uma palavra
public void adicionarVocabulo(Vocabulo vocabulo) {
    if (this.contem(vocabulo)) {
        System.out.println("\nA palavra " + vocabulo.getVocabulo() + " já foi cadastrada\n");
    } else {
        getLista().add(vocabulo);
        NUMPALAVRAS++;
        ordenaVocabulos();
    }
    
}

//Metodo para excluir uma palavra
public void deletarVocabulo(Vocabulo vocabulo) {

    if (this.contem(vocabulo)) {
        getLista().remove(vocabulo);
        System.out.println("O Vocabulo " + vocabulo.getVocabulo() + " foi excluido");
    } else {
        System.out.println("O Vocabulo não existe");
    }
    NUMPALAVRAS--;

}

//Metódo para imprimir as palavras do dicionário
public void imprimir() {

    Iterator<Vocabulo> it = getLista().iterator();

    while (it.hasNext()) {
        Vocabulo v = it.next();
        System.out.println("Vocabulo: " + v.getVocabulo());
        System.out.println("Significado: " + v.getSignificado());
        System.out.println("Classe Gramatical: " + ClasseGramatical.getDescricaoClasseGramatical(v.getClasseGramatical()));
    }


}
//Metodo que verifica se a palavra está presente no dicionário
public  boolean contem(Vocabulo vocabulo) {
    boolean contem;
    if (getLista().contains(vocabulo)) {
        contem = true;
    } else {
        contem = false;
       
    }
    return contem;
}

//Metodo de ordenacao de Vocabulos
public void ordenaVocabulos() {
Collections.sort(lista);
}


public List<Vocabulo> getLista() {
    return lista;
}

public void setLista(List<Vocabulo> lista) {
    this.lista = lista;
}

}

public class Vocabulo implements Comparable {

private String vocabulo;
private String significado;
private int classeGramatical;


//construtores
public Vocabulo(String v) {
    this.setVocabulo(v);
    this.setSignificado("");
    this.setClasseGramatical(ClasseGramatical.DESCONHECIDO);
}

Vocabulo() {
    throw new UnsupportedOperationException("Not yet implemented");
}

Vocabulo(String v, String s, int c) {
}

//Metodos Get e Set
public String getVocabulo() {
    return vocabulo;
}

public void setVocabulo(String vocabulo) {
    this.vocabulo = vocabulo;
}

public String getSignificado() {
    return significado;
}

public void setSignificado(String significado) {
    this.significado = significado;
}


public int getClasseGramatical() {
    return classeGramatical;
}

public void setClasseGramatical(int classeGramatical) {
    this.classeGramatical = classeGramatical;
}

   public int compareTo(Vocabulo o) {
    return this.vocabulo.compareTo(o.getVocabulo());
}

}

e ai galera ta dando estes tres erros

compile:
Exception in thread “main” java.lang.NullPointerException
at meudicionario.Dicionario.getPosicao(Dicionario.java:76)
at meudicionario.Dicionario.inserirVocabulo(Dicionario.java:26)
at meudicionario.Main.main(Main.java:58)

public class Main {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws  IOException {

    //Aponta para o arquivo
    File arquivo = new File("c:\\teste.txt");
    BufferedReader br = new BufferedReader(new FileReader(arquivo));
    StringBuffer buf;
    String linha;
    Dicionario dicionario = new Dicionario();

 
        int c = -1;
        String v ="";
        String s ="";
        linha = br.readLine();
 

       

        while (linha != null) {
            buf = new StringBuffer(linha);

            if ((linha = br.readLine()) == null) {
                break;
            }

            if (linha.contains(":")) {
                v = linha.substring(0, linha.indexOf(":"));
            }
            if (linha.contains(".")) {
                s = linha.substring(linha.indexOf(":") + 1, linha.indexOf("."));
                String classe = (linha.substring(linha.indexOf(".") + 2));
                c = Integer.parseInt(classe);

            }

        }
        
Vocabulo vocabulo =  new Vocabulo(v, s, 9);
dicionario.inserirVocabulo(vocabulo);



}

}

Tchê, ponha o “NUMPALAVRAS–” dentro das chaves do if, senão ele será subtraído em 1 sempre.

//Metodo para excluir uma palavra
public void deletarVocabulo(Vocabulo vocabulo) {

if (this.contem(vocabulo)) {
getLista().remove(vocabulo);
System.out.println(“O Vocabulo " + vocabulo.getVocabulo() + " foi excluido”);
} else {
System.out.println(“O Vocabulo não existe”);
}
NUMPALAVRAS–;

}

Ow gente boa valeu pela dica, era algo a mais errado, mas o erro continua.

alterei a main um pouquinho… mas mesmo assim

package meudicionario;

import java.awt.;
import java.io.
;
import java.util.*;

/**
*

  • @author aluno
    */
    public class Main {

    /**

    • @param args the command line arguments
      */
      public static void main(String[] args) throws IOException {

      //Aponta para o arquivo
      File arquivo = new File(“c:\teste.txt”);
      BufferedReader br = new BufferedReader(new FileReader(arquivo));
      StringBuffer buf;
      String linha;
      Dicionario dicionario = new Dicionario();

       int c = -1;
       String v ="";
       String s ="";
       linha = br.readLine();
      
      
      
      
       while (linha != null) {
           buf = new StringBuffer(linha);
      
           if ((linha = br.readLine()) == null) {
               break;
           }
      
           if (linha.contains(":")) {
               v = linha.substring(0, linha.indexOf(":"));
           }
           if (linha.contains(".")) {
               s = linha.substring(linha.indexOf(":") + 1, linha.indexOf("."));
               String classe = (linha.substring(linha.indexOf(".") + 2));
               if(classe.equals("SUB"))
               {c = 0;}
               if(classe.equals("VERBO"))
               {c = 1;}
               if(classe.equals("ADJ"))
               {c = 2;}
               if(classe.equals("ADV"))
               {c = 3;}
               if(classe.equals("PREP"))
               {c = 4;}
               if(classe.equals("INTERJ"))
               {c = 5;}
               if(classe.equals("CONJ"))
               {c = 6;}
               if(classe.equals("PRON"))
               {c = 7;}
                if(classe.equals("NUM"))
               {c = 8;}
               if(classe.equals("DESCONHECIDO"))
               {c = 9;}
              
           }
      
       }
      

    Vocabulo vocabulo = new Vocabulo(v, s, c);
    dicionario.inserirVocabulo(vocabulo);
    dicionario.imprimir();
    dicionario.getDadosDaPalavra(vocabulo);

    }

}