Manipulação de arquivos

14 respostas
E

Alguem pode me ajuda a resolve um erro?
Declarei uma classe medico q eh subclasse de funcionario, q eh subclasse de pessoa.

ai vai o código galera
public static void main(String[] args) throws FileNotFoundException, IOException {
        // TODO code application logic here
        Vector<Medico> medico = new Vector<Medico>();
        Medico med=null, m=null;
        ObjectInputStream Medic = new ObjectInputStream(new FileInputStream("Medico.bin"));
        while(true){
            try {
                med = (Medico) Medic.readObject();
                medico.add(med);
                m = medico.elementAt(0);
                System.out.println(m.getNome() + m.getRG() + "Merdaaaaaaa");
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
            
        }
    }

o erro q ta dando eh esse:

java.lang.ClassNotFoundException: salvar.Medico

me ajuda alguem ai pls.

Vlwz!

14 Respostas

ViniGodoy

A classe não chama Medic? Então pq vc está tentando um cast para Medico?

[OPS] Essa confusão ocorreu pq vc criou uma variável chamada Medic, com M maiúsculo. Pela convenção de códigos do Java, só nomes de classes devem ter letras maísculas seguidas de minúsculas. Arrume isso.

Além disso, não use Vector, use ArrayList.
Dica de como usar e link para os motivos você pode ver aqui:
http://www.guj.com.br/posts/list/74068.java#389435

ViniGodoy

Tem certeza que deu o import para a classe Medico? Ela está no mesmo pacote?

Em que linha exatamente dá o erro?

E

A classe chama Medico.
E mesmo depois eu troquei o Medic por medic, e msm assim não funcionou.

E pq vc me recomenda utilizar ArrayList?
quais metodos serão melhores para a utilização dela??

Vlwz

E

o erros que deu

<blockquote>init:

deps-jar:

Deleted 1 out of date files in 0 seconds

Compiling 1 source file to C:\Documents and Settings\Administrador\Meus documentos\NetBeansProjects\Ler\build\classes

compile:

run:

14/11/2007 18:17:15 ler.Main main

SEVERE: null

java.lang.ClassNotFoundException: salvar.Medico

at java.net.URLClassLoader$1.run(URLClassLoader.java:200)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:188)

at java.lang.ClassLoader.loadClass(ClassLoader.java:306)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)

at java.lang.ClassLoader.loadClass(ClassLoader.java:251)

at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Class.java:247)

at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:604)

at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)

at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)

at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)

at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)

at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)

at ler.Main.main(Main.java:30)

Exception in thread main java.io.EOFException

at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2552)

at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1297)

at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)

at ler.Main.main(Main.java:30)

Java Result: 1

BUILD SUCCESSFUL (total time: 0 seconds)

</blockquote>
T

Acho que você criou um pacote “salvar” e pôs a classe Medico dentro dele. Só que você salvou o tal arquivo com uma classe Medico que estava em outro pacote. Isso dá problemas com certeza.

E

O estranho é que eu não criei esse pacote “salvar”
o que eu fiz foi gerar uma classe Salvar, mais isso foi feito em um outro projeto, e tenho certeza que estou compilando o projeto correto.

Um pergunta. Seria mais facil eu utilizar LinkedList ao inves do ArrayList e do Vector.
A manipulação do Linked é mais facil né??

Porque pra percorrer não será muito necessario, intão esse não seria o problema.

Vlwz

ViniGodoy

Se você tivesse visto o link que eu deixei ali em cima, teria visto também que havia a explicação do porque usar o ArrayList, não Vector.
Veja esse link: http://www.guj.com.br/posts/list/71926.java#378301

Basicamente, pq o Vector é uma classe antiga, anterior a Collections Framework. Todos os seus métodos são sincronizados, o que normalmente é desnecessário, mais lento e exige mais recursos. Além disso, há métodos no Vector que são redundantes (como addElement() e add(), ou elementAt() e get()), justamente para manter compatibilidade com código antigo. Finalmente, pq o uso do Vector não é mais recomendado pela Sun desde o Java 1.2.

ViniGodoy

Não existe diferença na manipulação de um LinkedList e de um ArrayList.
Tanto que a forma recomendada de se declarar as listas é:

List<Medico> medicos = new ArrayList<Medico>();

O que dá diferença é na performance e no overhead que cada lista gera.

Via de regra, o ArrayList é preferível ao LinkedList. O LinkedList só vai ser mais vantajoso quando o número de inserções que não sejam no final da lista seja muitíssimo grande, e a navegação sobre a lista muito pequena. Um caso típico é a implementações de filas (não é a toa que um LinkedList implementa Queue).

É bom lembrar que o LinkedList gera um overhead de memória maior. Cada elemento alocado terá associado a ele pelo menos 2 ponteiros, ou 4 bytes. Coisa que não existe no ArrayList (é desprezível).

E

Vlwz!!!

Vo modifica meu sistema pra ArrayList msm…
é mais facíl.

Se não fosse pedir muito, existe algum tutorial facil e simples pra ensinar execções??
Acho que alguns dos erros presentes no meu sistema são devido as exeções que não devo estar inserido corretamente

Vlwz!!!

E

To passando tudo para ArrayList.

só que está dando um erro que não compreendo muito bem…

acho que deve ser como chamei o método.
da um aolhada ai pra mim galera, e ve se está certo.
Estou um pouco confuso pois declaro como

Lista a = new ArrayList()

ai não sei se no método eu coloco:

public ArrayList() medoto(){

ou se eu coloco como

public List() metodo(){

ai vai meu codigo:

public class Vetor { List<Medico> medicos; Medico medico; String nome, end, login, senha, cod, tipo_sang,tipo_parto, Medicamentos_atuais, alergias, hist_pessoal, hist_familiar, Doencas_detect,Medicamentos_tomados, Doencas_pre, Doencas_neo, sexo, nome_mae; int CRM, CPF, RG, tel1, tel2, RG_mae; ObjectInputStream medic; /** Creates a new instance of Vetor */ public Vetor(){ } public ArrayList<Medico> geraMedico(){ Medico s; try { //ObjectOutputStream x = new ObjectOutputStream( new FileOutputStream("Medico.txt")); medic = new ObjectInputStream(new FileInputStream("Medico.dat")); medicos = new ArrayList<Medico>(); do{ medico = (Medico) medic.readObject(); medicos.add(medico); }while(true); } catch(Exception e){ System.err.println("Num leu"); e.printStackTrace( ); }

Vlwz galeraaa

ramilani12

O prq desses parentes ?

public ArrayList() medoto(){ // isso nao ira compilar

Nao seria?

public ArrayList<Medico> medoto(){
E

Sim sim…

Vlwz!!!

ViniGodoy

Você só vai usar a palavra “ArrayList” após a palavra new.

Em todos os outros lugares, use List.

exemplo:

public List<Medico> leMedicos() { List<Medico> medicos = new ArrayList<Medicos>(); //Lê os médicos return medicos; }

Veja o porque explicado detalhadinho nesse post:
http://www.guj.com.br/posts/list/55387.java#290673

Aí vc também já entende a vantagem de declarar dessa forma. :wink:

ViniGodoy

Quanto às exceções. Dê uma lida aqui:
http://blog.caelum.com.br/2006/10/07/lidando-com-exceptions/

Criado 14 de novembro de 2007
Ultima resposta 14 de nov. de 2007
Respostas 14
Participantes 4