|
|||||||
|
|
|
![]() |
|
|
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: 18:09.



















