2013-04-28 8 views
28

Przepraszam, jeśli to jest oczywiste pytanie, ale nie mogę tego odczytać. Pracuję nad zadaniem dla kursu Data Structures. Obejmuje pobieranie danych z prostego pliku .dat. Nigdy wcześniej nie korzystaliśmy z żadnej z opcji dostępu do plików w Javie, więc profesor właśnie dał nam działający kod dla tego kawałka. Tak więc klasa o nazwie "FileReadExample" tworzy nowy buforowany obiekt czytnika, otwiera plik, a następnie ma wyrzucić kilka danych o tym pliku. Ale nie mam dostępu do żadnego z danych. W osobnym pliku testMain utworzę nowy obiekt FileReadExample o nazwie fr, a następnie spróbuję wydrukować takie rzeczy jak fr.readLine(), ale mówi mi, że nie ma takiej metody. Jestem pewien, że brakuje mi czegoś niesamowicie łatwego.Jak korzystać z buforowanego czytnika Reader w języku Java

EDIT - profesorowie Kod:

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!"); 
     } 
    } 
} 

mogę pisać kod profesor dał, ale nie mogę dowiedzieć się, jak dostać się w formatowanie tych stanowisk. Czy dobrze się czyta, że ​​muszę umieścić cztery spacje przed każdą linią, aby tutaj poprawnie sformatować kod? Nie ma sposobu, aby po prostu zablokować cały pakiet kodu naraz? Znowu mam wrażenie, że brakuje mi czegoś bardzo łatwego.

Dzięki.

+0

zrobić blok kodu, naciśnij spację 8 razy i wklej swój kod. – user2277872

+0

jeśli go wylogujesz, jestem pewien, że musisz zdobyć garść przykładów! – sanbhat

+0

Mieli goolged. I YouTubed. I szukane tutaj. Wszystko, co widzę, powinno działać. Jedyną rzeczą, która może być problemem, jest to, że zawiera się w próbie/haczyku. Ale nie jestem pewien, dlaczego to ma znaczenie. –

Odpowiedz

59

Spróbuj odczytać plik:

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

Musisz umieścić swój kod w bloku try-catch, ponieważ masz odczytać plik, a wyjątek może zostać odrzucony przy dowolnej okazji. –

+0

Jeśli metoda zgłasza wyjątek IOException, nie potrzebujesz bloku try-catch. BTW innych odpowiedzi na to pytanie również brakuje bloku try-catch, więc jest to tylko przykład, jak czytać plik. –

+0

gdzie jest twoja metoda lols zobacz ten http://stackoverflow.com/a/16265790/2277645 –

1

O ile mi zrozumieć fr jest obiektem klasy FileReadExample. Jest więc oczywiste, że nie będzie miał żadnej metody, np. Fr.readLine(), jeśli sam jej nie stworzysz.

Po drugie, myślę, że poprawny konstruktor klasy BufferedReader pomoże Ci wykonać zadanie.

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

to powinno ci pomóc.

+0

To ma sens.Tak więc FileReader tworzy własny buforowany obiekt Reader o nazwie 'in'. Tak więc mam obiekt w moim testMain zwany fr, który powinien zawierać obiekt BufferedReader, który powinien być dostępny. Z głównej strony testu, jak mogę to nazwać? Funkcja fr.in.readLine() nie działa. Podany tutaj kod powinien się znajdować w FileReader lub w głównym? Dziękuję i jeszcze raz przepraszam, jeśli brakuje mi czegoś oczywistego. –

+0

jak o utworzeniu metody w klasie FileReadExample, która używa metody in.readLine() i zwraca wartość typu String. Więc np. jeśli utworzysz metodę o nazwie String readALine(), która zwraca str. możesz go użyć w swojej klasie testMain, takiej jak ta-> mystr = fr.readaline(); –

+0

Bum. To się stało. Metoda Accessor, powinna była o tym pomyśleć. Dzięki. –