2013-04-28 15 views
28

Scusate se questa è una domanda ovvia, ma non riesco a capirlo. Sto lavorando a un incarico per un corso sulle strutture dati. Si tratta di estrarre dati da un semplice file .dat. Non avevamo mai usato nessuna delle opzioni di accesso ai file in Java, quindi il professore ci ha appena dato il codice funzionante per quel pezzo. Quindi una classe chiamata 'FileReadExample' crea un nuovo oggetto lettore bufferizzato, apre un file e quindi dovrebbe estrarre un gruppo di dati su quel file. Ma non posso accedere a nessuno dei dati. In un file testMain separato, creo un nuovo oggetto FileReadExample chiamato fr e poi provo a stampare cose come fr.readLine() da lì, ma mi dice che non esiste un tale metodo. Sono sicuro che mi manca qualcosa incredibilmente facile.Come usare Buffered Reader in Java

EDIT - Il Codice Professori:

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 

public class FileReadExample 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("got here"); 
     try 
     { 
      BufferedReader in = new BufferedReader(new FileReader(new File("sample-file.dat"))); 
      System.out.println("File open successful!"); 

      int line = 0; 
      for (String x = in.readLine(); x != null; x = in.readLine()) 
      { 
       line++; 
       System.out.println(x); 
       if (line <= 3) 
       { 
        String[] tokens = x.split(" "); 
        System.out.println("Number of tokens in line " + line + ": " + tokens.length); 
        System.out.println("The tokens are:"); 
        for (String token : tokens) 
        { 
         System.out.println(token); 
        } 
       } 
       else 
       { 
        String[] tokens = x.split("\\|"); 
        System.out.println("Number of tokens in line " + line + ": " + tokens.length); 
        System.out.println("The tokens are:"); 
        for (String token : tokens) 
        { 
         System.out.println(token); 
        } 
        Integer[] values = new Integer[tokens.length]; 
        Integer sum = 0; 
        for (int i = 0; i < tokens.length; i++) 
        { 
         sum += Integer.parseInt(tokens[i]); 
        } 
        System.out.println("Sum: " + sum); 
       } 
      } 
     } catch (IOException e) 
     { 
      System.out.println("File I/O error!"); 
     } 
    } 
} 

posso pubblicare il codice il professore ha dato, ma non riesco a capire come ottenere la formattazione proprio in questi posti. Sto leggendo che devo mettere quattro spazi davanti a ogni riga per ottenere la formattazione del codice correttamente qui? Non c'è modo di bloccare un intero gruppo di codice contemporaneamente? Di nuovo, mi sento come se mi mancasse qualcosa di estremamente facile lì.

Grazie.

+0

per eseguire un blocco di codice, premere la barra spaziatrice 8 volte e incollare il codice. – user2277872

+0

se lo google fuori, sono sicuro che è necessario ottenere un sacco di esempi! – sanbhat

+0

Hanno perso la testa. E YouTubed. E cercato qui. Da tutto quello che posso vedere, dovrebbe funzionare. L'unica cosa che ho trovato che potrebbe essere il problema è che è tutto contenuto in un try/catch. Ma non sono sicuro del perché questo sia importante. –

risposta

59

Provate a leggere un file:

BufferedReader reader = null; 

try { 
    File file = new File("sample-file.dat"); 
    reader = new BufferedReader(new FileReader(file)); 

    String line; 
    while ((line = reader.readLine()) != null) { 
     System.out.println(line); 
    } 

} catch (IOException e) { 
    e.printStackTrace(); 
} finally { 
    try { 
     reader.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+5

Devi inserire il codice nel blocco try-catch perché devi leggere un file e un'eccezione può essere lanciata in ogni caso –

+0

Se il metodo genera IOException non hai bisogno del blocco try-catch. Tra le altre risposte a questa domanda manca anche il blocco try-catch, quindi questo è solo un esempio di come leggere un file. –

+0

dove è il tuo metodo lols vedi questo http://stackoverflow.com/a/16265790/2277645 –

1

Per quanto ho capito fr è l'oggetto della vostra classe FileReadExample. Quindi è ovvio che non avrà alcun metodo come fr.readLine() se non lo crei tu stesso.

in secondo luogo, penso che un costruttore corretto della classe BufferedReader ti aiuterà a svolgere il tuo compito.

String str; 
BufferedReader buffread = new BufferedReader(new FileReader(new File("file.dat"))); 
str = buffread.readLine(); 
. 
. 
buffread.close(); 

questo dovrebbe aiutarti.

+0

Questo ha senso.Quindi FileReader crea il proprio oggetto Buffered Reader chiamato 'in'. Quindi ho un oggetto nel mio testMain chiamato fr, che dovrebbe avere al suo interno un oggetto BufferedReader che dovrebbe essere accessibile. Dal test principale, come posso chiamarlo? fr.in.readLine() non funziona. Il codice che hai fornito qui dovrebbe andare in FileReader o nel principale? Grazie, e ancora, scusa se mi manca qualcosa di ovvio. –

+0

come se si crea un metodo all'interno della classe FileReadExample che utilizza il metodo in.readLine() e restituisce un valore String. Quindi ad es. se si crea un metodo chiamato String readALine() che restituisce str. puoi usarlo nella tua classe testMain come this-> mystr = fr.readALine(); –

+0

Boom. L'ha capito. Metodo Accessor, avrebbe dovuto pensarci. Grazie. –