Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Le webcam Insta360 Link 2 Pro e Link 2C Pro sono una proposta di fascia alta per chi cerca qualità 4K e tracciamento automatico del soggetto senza ricorrere a configurazioni complesse. Entrambi i modelli condividono sensore, ottiche e funzionalità audio avanzate, differenziandosi per il sistema di tracciamento: gimbal a due assi sul modello Link 2 Pro, soluzione digitale sul 2C Pro
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-05-2013, 15: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, 09: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, 15: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, 10: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


HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Il MacBook Pro è sempre più...
Il prezzo della Switch 2 potrebbe divent...
TikTok chiarisce il funzionamento della ...
Samsung Galaxy A07 5G: il nuovo entry le...
Realme 16 in arrivo: un mix tra iPhone A...
Domenica di follia su Amazon: iPhone 17 ...
Questo portatile HP OMEN con Core Ultra ...
Robot aspirapolvere al prezzo giusto: le...
Il nuovo M5 Max potrebbe avere una GPU p...
Pulizie automatiche al top (e a prezzo B...
Casa più calda, spese più leggere: Tado ...
Mini PC mostruoso in offerta nascosta su...
Netflix promette 45 giorni di esclusivit...
Gigabyte: un handheld? Sì, ma sol...
Samsung conferma l'arrivo di tre variant...
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: 22:44.


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