|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: May 2013
Messaggi: 2
|
[JAVA] Lettura da file
Salve a tutti. Oggi stavo provando ad implementare la lettura da file in java utilizzando il seguente codice:
Codice:
public void leggiMB(){ String nomefile="mailbox.txt"; String delim1 = ";"; String delim2 = "/"; String riga; FileReader f = null ; BufferedReader fIN = null; StringTokenizer st; try{ f = new FileReader(nomefile); fIN = new BufferedReader(f); } catch(IOException ioe){ System.out.println("Errore in fase di apertura del file:"+nomefile+ioe.getMessage()); } try{ riga=fIN.readLine(); st = new StringTokenizer(riga, delim1); while(riga!=null){ String mit=st.nextToken(); String ogg=st.nextToken(); String tes=st.nextToken(); String dat=st.nextToken(); StringTokenizer st1 = new StringTokenizer(dat, delim2); int gio=Integer.parseInt(st1.nextToken()); int mes=Integer.parseInt(st1.nextToken()); int ann=Integer.parseInt(st1.nextToken()); String ore=st.nextToken(); StringTokenizer st2 = new StringTokenizer(ore, delim2); int ora=Integer.parseInt(st2.nextToken()); int min=Integer.parseInt(st2.nextToken()); Mail m1=new Mail(mit,ogg,tes,gio,mes,ann,ora,min); boolean b=MB.add(m1); riga=fIN.readLine(); } } catch(IOException ioe){ System.out.println("Errore in fase di lettura dal file:"+nomefile+ioe.getMessage()); System.exit(0); } try{ f.close(); } catch(IOException ioe){ System.out.println("Errore in fase di chiusura del file:"+nomefile+ioe.getMessage()); } } Codice:
Exception in thread "main" java.util.NoSuchElementException at java.util.StringTokenizer.nextToken(StringTokenizer.java:332) at mailbox.MailBox.leggiMB(MailBox.java:103) at mailbox.Main.main(Main.java:61) Java Result: 1 Grazie in anticipo per una vostra risposta ^^ |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Sep 2007
Città: Albiolo (CO)
Messaggi: 165
|
http://docs.oracle.com/javase/7/docs...Exception.html
Stai cercando di leggere un token che non esiste. Evidentemente la stringa che stai analizzando è costruita in modo errato. Quando richiami il metodo nextToken() senza cicli iterativi devi essere sicuro che ogni riga del file che stai leggendo rispetti le tue regole di delimitazione. |
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: May 2013
Messaggi: 2
|
Ho modificato il codice, utilizzando nel ciclo while una condizione col metodo hasMoreElements() che dovrebbe (a quanto ho capito) restituire se ci sono altri elementi consecutivamente alla nostra riga, quindi a quella successiva. Ecco il codice:
Codice:
public void leggiMB(){ String nomefile="mailbox.txt"; String delim1 = ";"; String delim2 = "/"; String riga; FileReader f = null ; BufferedReader fIN = null; StringTokenizer st; try{ f = new FileReader(nomefile); fIN = new BufferedReader(f); } catch(IOException ioe){ System.out.println("Errore in fase di apertura del file:"+nomefile+ioe.getMessage()); } try{ riga=fIN.readLine(); st = new StringTokenizer(riga, delim1); while(st.hasMoreElements()!=false && riga!=null){ String mit=st.nextToken(); String ogg=st.nextToken(); String tes=st.nextToken(); String dat=st.nextToken(); String ore=st.nextToken(); StringTokenizer st1 = new StringTokenizer(dat, delim2); int gio=Integer.parseInt(st1.nextToken()); int mes=Integer.parseInt(st1.nextToken()); int ann=Integer.parseInt(st1.nextToken()); StringTokenizer st2 = new StringTokenizer(ore, delim2); int ora=Integer.parseInt(st2.nextToken()); int min=Integer.parseInt(st2.nextToken()); Mail m1=new Mail(mit,ogg,tes,gio,mes,ann,ora,min); Aggiungi(m1); riga=fIN.readLine(); } } catch(IOException ioe){ System.out.println("Errore in fase di lettura, il file probabilmente è vuoto:"+nomefile+ioe.getMessage()); } |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Sep 2007
Città: Albiolo (CO)
Messaggi: 165
|
Ti legge solo la prima riga perché alla fine della prima iterazione non sposti lo StringTokenizer sulla riga successiva. Infatti, avendo esaurito i token della prima riga, il metodo hasMoreElements() ritorna FALSE.
Prova così. Codice:
try{ while((riga = fIN.readLine()) != null){ st = new StringTokenizer(riga, delim1); String mit=st.nextToken(); String ogg=st.nextToken(); String tes=st.nextToken(); String dat=st.nextToken(); String ore=st.nextToken(); StringTokenizer st1 = new StringTokenizer(dat, delim2); int gio=Integer.parseInt(st1.nextToken()); int mes=Integer.parseInt(st1.nextToken()); int ann=Integer.parseInt(st1.nextToken()); StringTokenizer st2 = new StringTokenizer(ore, delim2); int ora=Integer.parseInt(st2.nextToken()); int min=Integer.parseInt(st2.nextToken()); Mail m1=new Mail(mit,ogg,tes,gio,mes,ann,ora,min); Aggiungi(m1); } } catch(IOException ioe){ System.out.println("Errore in fase di lettura, il file probabilmente è vuoto:"+nomefile+ioe.getMessage()); } |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:34.