Torna indietro   Hardware Upgrade Forum > Software > Programmazione

L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
La parola d'ordine al Nextcloud Summit 2026, che si è tenuto a Monaco, è stata "sovranità". Non come è spesso usato questo termine in politica ma, al contrario, come capacità positiva di decidere il proprio destino tecnologico, con modalità collaborative e aperte. L'Europa dice già molto nel mondo open source, che viene visto come mezzo per ottenere la tanto agognata autonomia digitale
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete implementa due bracci estensibili, per spazzola e moccio, che si spingono ben oltre quanto visto sino ad oggi permettendo una pulizia di casa ancor più capillare e precisa
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati
La tecnologia SQD-Mini LED di TCL arriva sul taglio da 65 pollici con la serie C8L: 2040 zone, pannello WHVA 2.0 e un picco che alle rilevazioni delle sonde tocca i 4400 nit nel profilo Filmmaker e un HDR quasi perfetto
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-05-2013, 14:29   #1
xNamik
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());
        }
        
    }
Purtroppo in fase di esecuzione, quando vado ad effettuare la lettura da file, mi viene tirata fuori la seguente eccezzione:
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
Cosa potrei aver sbagliato?

Grazie in anticipo per una vostra risposta ^^
xNamik è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2013, 08:17   #2
PHØΞИIX
Member
 
L'Avatar di PHØΞИIX
 
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.
PHØΞИIX è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2013, 14:10   #3
xNamik
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());
            
        }
Stranamente adesso mi fa la lettura, ma solo della prima riga.
xNamik è offline   Rispondi citando il messaggio o parte di esso
Old 07-05-2013, 09:36   #4
PHØΞИIX
Member
 
L'Avatar di PHØΞИIX
 
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());
}
Così ovviamente il codice potrebbe lanciare ancora eccezioni. Dovrai quindi effettuare controlli sulla non nullità dei token e sulla correttezza del parseInt.
PHØΞИIX è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati TCL 65C8L, la recensione del SQD-Mini LED da 440...
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro MSI Maestro 500 Wireless: ANC e 90 ore di autono...
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine NL-LC1 è il primo dissipatore a liquido A...
Il telescopio spaziale ESA Euclid ha fot...
L'astronauta ESA Sophie Adenot ha provat...
Leica SL3-P: la full frame più ev...
All'interno della capsula Starfall di Sp...
8BitDo Arcade Controller Pro è il...
Dead or Alive 6 Last Round: una chiusura...
DXC e Anthropic insieme per portare l'IA...
Lenovo presenta nuove soluzioni per l'IA...
OVHcloud potenzia la Quantum Platform: i...
Octopus Energy lancia Nook, la sua gamma...
IBM presenta il primo chip al mondo sott...
Qualcomm Dragonfly debutta nel settore d...
Scopa elettrica Proscenic P11 Ultra+ a 8...
Napoli capitale italiana del calcolo qua...
Emma avrebbe dovuto contribuire alla sov...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 05:38.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v