Manipulação de arquivos

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

[code]public static void main(String[] args) throws FileNotFoundException, IOException {
// TODO code application logic here
Vector medico = new Vector();
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);
}

    }
}[/code]

o erro q ta dando eh esse: [quote]java.lang.ClassNotFoundException: salvar.Medico[/quote]

me ajuda alguem ai pls.

Vlwz!

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

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

Em que linha exatamente dá o erro?

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

o erros que deu

[quote]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)
[/quote]

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.

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

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.

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

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!!!

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

O prq desses parentes ?


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

Nao seria?

public ArrayList<Medico> medoto(){

Sim sim…

Vlwz!!!

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:

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