2013-03-29 13 views
10

Mam plik tekstowy o nazwie foo.txt i jego zawartość są jak poniżej:Java: zawartość wydruk z pliku tekstowego do ekranu

to

jest

tekst

Jak wydrukowałbym ten dokładny plik na ekranie w Javie 7?

+1

Wygląda na to, że trzeba przeczytać tekst z pliku. Mogę was zapewnić, że w Internecie jest mnóstwo informacji na temat czytania z plików w Javie ... –

+1

Mówię wam! Nigdzie nie mogę tego znaleźć! I tak, używam Google. – user2151887

+1

To ostatnie pytanie ma tylko te szczegóły, których szukasz: http://stackoverflow.com/questions/2788080/reading-a-text-file-in-java. – RouteMapper

Odpowiedz

25

Przed Java 7:

BufferedReader br = new BufferedReader(new FileReader("foo.txt")); 
String line = null; 
while ((line = br.readLine()) != null) { 
    System.out.println(line); 
} 
  • add wyjątek obsługi
  • dodatek zamykania strumienia

Ponieważ Java 7, nie ma potrzeby, aby zamknąć strumienia, ponieważ realizuje autocloseable

try (BufferedReader br = new BufferedReader(new FileReader("foo.txt"))) { 
    String line = null; 
    while ((line = br.readLine()) != null) { 
     System.out.println(line); 
    } 
} 
+1

Ale co z kodowaniem? Ten kod zależy od domyślnego kodowania platformy. – kkhipis

+1

Dobrze, chciałem dostarczyć najprostszy przypadek. Jeśli chcesz jawnie określić kodowanie, zamiast "FileReader", użyłbyś ['new InputStreamReader ('] (http://docs.oracle.com/javase/7/docs/api/java/io/InputStreamReader .html) ['new FileInputStream (pathToFile)'] (http://docs.oracle.com/javase/7/docs/api/java/io/FileInputStream.html) ', )'. –

1

Dla tych, którzy są nowicjuszami w Javie i zastanawiają się, dlaczego odpowiedź Jiri nie działa, upewnij się, że robisz to, co mówi i obsługujesz wyjątek, bo inaczej to się nie skompiluje. Oto niezbędne minimum:

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

public class ReadFile { 

    public static void main(String args[]) throws IOException { 
     BufferedReader br = new BufferedReader(new FileReader("test.txt")); 
     for (String line; (line = br.readLine()) != null;) { 
      System.out.print(line); 
     } 
     br.close() 
    } 
} 
2

z Java 7 na odpowiedź Jiri może ulec poprawie try-with-zasobów na: obsługę

try (BufferedReader br = new BufferedReader(new FileReader("foo.txt"))) { 
    String line = null; 
    while ((line = br.readLine()) != null) { 
     System.out.println(line); 
    } 
} 

Dodaj wyjątek w miejscu wyboru, albo w tym try lub gdzie indziej .

7

Dlaczego nikt nie pomyślał, że warto wspomnieć o skanerze?

Scanner input = new Scanner(new File("foo.txt")); 

while (input.hasNextLine()) 
{ 
    System.out.println(input.nextLine()); 
} 
0

Każdy przykład pokazuje rozwiązanie za pomocą FileReadera. Jest to wygodne, jeśli nie musisz przejmować się kodowaniem plików. Jeśli używasz innych języków niż angielski, kodowanie jest bardzo ważne. Wyobraź sobie, że masz plik z tym tekstem, a plik używa formatu Windows 1250. Jeśli używasz FileReader dostaniesz ten wynik:

P��li� �lu�ou�k� k�� 
�p�l ��belsk� �dy 

Więc w tym przypadku trzeba by było określić jako kodowanie CP1250 (Europejski System Windows Wschodniej), ale FileReader nie pozwala, aby to zrobić. W takim przypadku powinieneś użyć InputStreamReader na FileInputStream.

Przykład:

String encoding = "Cp1250"; 
File file = new File("foo.txt"); 

if (file.exists()) { 
    try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), encoding))) { 
     String line = null; 
     while ((line = br.readLine()) != null) { 
      System.out.println(line); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
else { 
    System.out.println("file doesn't exist"); 
} 

W przypadku, gdy chcesz przeczytać charakter plik po znaku nie używaj BufferedReader.

try (InputStreamReader isr = new InputStreamReader(new FileInputStream(file), encoding)) { 
    int data = isr.read(); 
    while (data != -1) { 
     System.out.print((char) data); 
     data = isr.read(); 
    } 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
Powiązane problemy