Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    28

    lettura da file con java

    Salve a tutti. Sto provando a leggere , con il seguente codice java, il file "fileEsami.txt" (che ho riportato sotto) e ad inserire in un Vector la lista di oggetti "Esame" compresa tra i due "#" quando la matricola di un certo oggetto "Studente" è uguale a quella letta dal file. Purtroppo, però , il compilatore mi segnala degli errori. Qualcuno potrebbe aiutarmi a capire quali sono e come posso correggerli? Ringrazio tutti coloro che vorranno rispondermi!

    codice:
    BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(new File("fileEsami.txt"))));
    		
    		Studente s=new Studente("1123456", "Rossi","Andrea","15-07-1984","Roma");
    		Vector v=new Vector();
    		int cost=0;
    		while(cost!=1){
    		String mat=br.readLine();
    		if(mat.equals(s.getMatricola())){
    		cost=1;
    		String variabile="s";
    			while(!variabile.equals("#")){
    				String simbolo=br.readLine();
    			Esame es =Esame.read(br);	
    				while(!es.equals("#")){
    				v.addElement(es);
    				es =Esame.read(br);
    				}
    			variabile=br.readLine();
    			}
    		}else{
    			String var="t";
    			while(!var.equals("#")){
    				String sim=br.readLine();
    			Esame es =Esame.read(br);	
    				while(!es.equals("#")){
    				es =Esame.read(br);
    				}
    			var=br.readLine();
    			}
    			cost=0;	
    		}
    fileEsami.txt :

    1123456
    #
    Matematica 1
    10-07-2006
    27
    Fisica 1
    07-05-2007
    24
    Programmazione
    10-06-2007
    30
    #
    1123567
    #
    Matematica 1
    10-07-2006
    29
    Elementi di informatica
    15-06-2007
    25
    #
    1167523
    #
    #

  2. #2
    Ciao,

    magari dicci che errori ti dà...
    S-RDZN

    J2EE programmer

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    28
    Ciao,
    il compilatore mi da questi errori:

    Exception in thread "main" java.lang.NumberFormatException: For input string :"#"
    at java.lang.NumberFormatException.forInputString(Num berFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:447)
    at java.lang.Integer.parseInt(Integer.java:497)

  4. #4
    Originariamente inviato da isal
    Ciao,
    il compilatore mi da questi errori:

    Exception in thread "main" java.lang.NumberFormatException: For input string :"#"
    at java.lang.NumberFormatException.forInputString(Num berFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:447)
    at java.lang.Integer.parseInt(Integer.java:497)
    Vuol dire che provi a fare un parse da una Stringa con valore "#" ad un int, che ovviamente è impossibile.....xò nel codice che hai postato non riesco a trovare questo parse...forse è in qualche classe che istanzi, tipo Esame...posta tutto lo stacktrace dell'errore e vediamo dove viene generato.
    S-RDZN

    J2EE programmer

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    28
    Queste sono le due classi Esame e Studente che ho implementato:
    codice:
    import java.io.BufferedReader;
    import java.io.PrintStream;
    public class Esame {
    	public Esame(String nomeEsame, String dataEsame, int  voto){
    		this.nomeEsame=nomeEsame;
    		this.dataEsame=dataEsame;
    		this.voto=voto;
    	
    	}
    	//METODI GET
    	public String getNomeEsame(){
    		return nomeEsame;
    		}
    	public String getDataEsame(){
    		return dataEsame;
    	}
    	public int getVoto(){
    		return voto;
    	}
    	//METODI SET
    	public void setNomeEsame(String nomeEsame){
    		this.nomeEsame=nomeEsame;
    	}
    	public void setDataEsame(String dataEsame){
    		this.dataEsame=dataEsame;
    	}
    	public void setVoto(int voto){
    		this.voto=voto;
    	}
    	//METODO READ
    	public static Esame read(BufferedReader br)throws Exception{
    		String nomeEsame=br.readLine();
    		if(nomeEsame==null)
    			return null;
    		String dataEsame=br.readLine();
    		if(dataEsame==null)
    			return null;
    		String v=br.readLine();
    		if(v==null)
    			return null;
    		int voto=Integer.parseInt(v);
    		return new Esame( nomeEsame, dataEsame, voto);
    	}
    	//METODO PRINT 
    	public void print(PrintStream ps){
    		ps.println(nomeEsame);
    		ps.println(dataEsame);
    		ps.println(voto);
    		
    	}
    	//METODO TOSTRING 
    	public String toString(){
    		return nomeEsame+" "+dataEsame+" "+voto;
    	}
    	//METODO EQUALS
    	public boolean equals(Esame e){
    		return(nomeEsame.equals(e.getNomeEsame())&&e.getDataEsame().equals(dataEsame)&&voto==e.getVoto());
    	}
    	private  String nomeEsame, dataEsame;
    	private  int voto;
    }


    codice:
    import java.io.BufferedReader;
    import java.io.PrintStream;
    public class Studente {
    	//****COSTRUTTORE****
    	public Studente(String matricola, String cognome, String nome, String dataNascita, String luogoNascita){
    		this.matricola=matricola;
    		this.cognome=cognome;
    		this.nome=nome;
    		this.dataNascita=dataNascita;
    		this.luogoNascita=luogoNascita;
    	}
    	//****METODI GET****
    	public String  getMatricola(){
    		return matricola;
    	}
    	public String getCognome(){
    		return cognome;
    	}
    	public String getNome(){
    		return nome;
    	}
    	public String getDataNascita(){
    		return dataNascita;
    	}
    	public String getLuogoNascita(){
    		return luogoNascita;
    	}
    	//****METODI SET****
    	public void setMatricola(String matricola){
    		this.matricola=matricola;
    	}
    	public void setCognome(String cognome){
    		this.cognome=cognome;
    	}
    	public void setNome(String nome){
    		this.nome=nome;
    	}
    	public void setDataNascita(String dataNascita){
    		this.dataNascita=dataNascita;
    	}
    	public void setLuogoNascita(String luogoNascita){
    		this.luogoNascita=luogoNascita;
    	}
    	//****METODO PRINT****
    	public void print(PrintStream ps){
    		ps.println(matricola);
    		ps.println(cognome);
    		ps.println(nome);
    		ps.println(dataNascita);
    		ps.println(luogoNascita);
    	}
    	//****METODO READ****
    	public static Studente read(BufferedReader br)throws Exception{
    		String matricola=br.readLine();
    		if(matricola==null)
    			return null;
    		String cognome=br.readLine();
    		if(cognome==null)
    			return null;
    		String nome=br.readLine();
    		if(nome==null)
    			return null;    
    		String dataNascita=br.readLine();
    		if(dataNascita==null)
    			return null;
    		String luogoNascita=br.readLine();
    		if(luogoNascita==null)
    			return null;
    		return new Studente(matricola, cognome, nome, dataNascita, luogoNascita);
    	}
    	//****METODO TOSTRING****
    	public String toString(){
    		return matricola+" "+cognome+" "+nome+" "+dataNascita+" "+luogoNascita;
    	} 
    	//****METODO EQUALS****
    	public boolean equals(Studente s){
    		return(matricola.equals(s.getMatricola()))&&cognome.equals(s.getCognome())&&nome.equals(s.getNome())&&dataNascita.equals(s.getDataNascita())&&luogoNascita.equals(luogoNascita);
    	}
    	private String  matricola;
    	private String cognome,  nome,  dataNascita,  luogoNascita;
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    28
    PS:

    il compilatore mi dà errore nella classe Esame:

    at Esame.read(Esame.java:41)

  7. #7
    Si, infatti l'errore è nel metodo read() di Esame, al momento del parse del voto (in rosso):

    codice:
    //METODO READ
    	public static Esame read(BufferedReader br)throws Exception{
    		String nomeEsame=br.readLine();
    		if(nomeEsame==null)
    			return null;
    		String dataEsame=br.readLine();
    		if(dataEsame==null)
    			return null;
    		String v=br.readLine();
    		if(v==null)
    			return null;
    		int voto=Integer.parseInt(v);
    		return new Esame( nomeEsame, dataEsame, voto);
    	}
    Devi prevedere l'eventualità che la riga contenga caratteri non numerici e in tal caso gestire la situazione. Devi mettere il parse in un blocco TRY-CATCH:

    codice:
    //METODO READ
    	public static Esame read(BufferedReader br)throws Exception{
    		String nomeEsame=br.readLine();
    		if(nomeEsame==null)
    			return null;
    		String dataEsame=br.readLine();
    		if(dataEsame==null)
    			return null;
    		String v=br.readLine();
    		if(v==null)
    			return null;
                    
                    int voto = 0;
                    try{
    		     voto = Integer.parseInt(v);
                         return new Esame( nomeEsame, dataEsame, voto);
                    } catch (NumberFormatException ex){
                         //entrerà nel catch quando la stringa conterrà caratteri non numerici e sarà
                        //quindi non parsabile.
                        return null; //io ho messo "return null", poi vedi tu quello che devi fare nel    
                                     //catch in base alle esigenze dell'applicazione
                    }
                    
    	}
    S-RDZN

    J2EE programmer

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    28
    Ho aggiunto il try/catch e ho apportato alcune modifiche al codice ( riportato sotto), ma ora il programma funziona solo con la prima matricola del fileEsami , se inserisco un altro studente e quindi un' altra matricola , compilatore mi da questo errore:


    Exception in thread "main" java.lang.NullPointerException
    at Prova.main(Prova.java:12)


    codice:
    import java.io.*;
    import java.util.*;
    public class Prova {
    	public static void main(String[] args)throws Exception{
    		BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(new File("fileEsami.txt"))));
    		
    		Studente s=new Studente("1123567", "Bianchi","Mario","10-01-1985","Roma");
    		Vector v=new Vector();
    		int cost=0;
    		while(cost!=1){
    			String mat=br.readLine();
    		if(mat.equals(s.getMatricola())){
    		cost=1;
    		String variabile="s";
    			while(!variabile.equals("#")){
    				 String simbolo=br.readLine();
    			Esame es =Esame.read(br);	
    				while(es!=null){
    				v.addElement(es);
    				es =Esame.read(br);
    				}
    			variabile="#";
    			simbolo=br.readLine();
    			}
    		}else{
    			String var="t";
    			while(!var.equals("#")){
    				String sim=br.readLine();
    			Esame esa =Esame.read(br);	
    				while(esa!=null){
    					v.add(esa);	
    				esa =Esame.read(br);
    				}
    				
    			var="#";
    			sim=br.readLine();
    			}
    			cost=0;	
    		}
    	 }
    	
    		Enumeration e=v.elements();
    		while(e.hasMoreElements()){
    			Esame es=(Esame) e.nextElement();
    			es.print(System.out);
    		}
    		
    	}
    	
    
    }
    Come posso risolvere il problema??

  9. #9
    Originariamente inviato da isal
    Ho aggiunto il try/catch e ho apportato alcune modifiche al codice ( riportato sotto), ma ora il programma funziona solo con la prima matricola del fileEsami , se inserisco un altro studente e quindi un' altra matricola , compilatore mi da questo errore:


    Exception in thread "main" java.lang.NullPointerException
    at Prova.main(Prova.java:12)


    codice:
    import java.io.*;
    import java.util.*;
    public class Prova {
    	public static void main(String[] args)throws Exception{
    		BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(new File("fileEsami.txt"))));
    		
    		Studente s=new Studente("1123567", "Bianchi","Mario","10-01-1985","Roma");
    		Vector v=new Vector();
    		int cost=0;
    		while(cost!=1){
    			String mat=br.readLine();
    		if(mat.equals(s.getMatricola())){
    		cost=1;
    		String variabile="s";
    			while(!variabile.equals("#")){
    				 String simbolo=br.readLine();
    			Esame es =Esame.read(br);	
    				while(es!=null){
    				v.addElement(es);
    				es =Esame.read(br);
    				}
    			variabile="#";
    			simbolo=br.readLine();
    			}
    		}else{
    			String var="t";
    			while(!var.equals("#")){
    				String sim=br.readLine();
    			Esame esa =Esame.read(br);	
    				while(esa!=null){
    					v.add(esa);	
    				esa =Esame.read(br);
    				}
    				
    			var="#";
    			sim=br.readLine();
    			}
    			cost=0;	
    		}
    	 }
    	
    		Enumeration e=v.elements();
    		while(e.hasMoreElements()){
    			Esame es=(Esame) e.nextElement();
    			es.print(System.out);
    		}
    		
    	}
    	
    
    }
    Come posso risolvere il problema??

    Vuol dire che punta ad un oggetto che in quel momento vale null, quindi andando a richiamre un metodo su quell'oggetto, essendo null, genera l'eccezione NullPointerException. Vedi qual'è quest'oggetto e gestisci l'eventualità che sia nullo.... penso che la riga interessata sia questa
    codice:
    if(mat.equals(s.getMatricola())){
    .....
    comunque verificalo tu e in caso fai qualcosa del genere
    codice:
    if(mat != null){
       if(mat.equals(s.getMatricola())){
       .....
    Ciao
    S-RDZN

    J2EE programmer

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    28
    Grazie mille, simoneRDZN!! Adesso il programma funziona correttamente !!

    Ciao e grazie ancora per l'aiuto!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.