Możliwy duplikat:
Jak utworzyć ciąg Java z zawartości pliku
Cały plik tekstowy do ciągu w języku Java
Próbuję odczytać zawartość pliku za pomocą FileReader. Ale chcę przeczytać plik bez czytania wiersz po wierszu. Czy można odczytać cały plik bez pętli. Używam następującego kodu
try
{
File ff=new File("abc.txt");
FileReader fr=new FileReader(ff);
String s;
while(br.read()!=-1)
{
s=br.readLine();
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
Odpowiedzi:
Jeśli plik jest mały , możesz raz odczytać całe dane:
źródło
file.length()
może zwrócić 0 dla plików w ramach/proc
. W takich przypadkach ten fragment zwróci pusty ciąg.read
Może też nie wypełnić całego bufora. To może działać w praktyce z większością JRE, ale nie ma gwarancji w API.Jedno liniowe rozwiązanie Java 7
lub
źródło
String text = Files.readString(Paths.get("file"));
jest jeszcze krótsza, zakładając, że chcesz otrzymać łańcuch znaków UTF-8.file.toPath()
wewnątrzreadAllBytes
Call requires API level 26: java.nio.file.Files#readAllBytes
- to samo dlareadString
.Możesz spróbować użyć Scanner, jeśli używasz JDK5 lub nowszego.
Możesz też użyć guawy
źródło
String data = Files.toString(new File("path.txt"), Charsets.UTF_8);
. Tylko mała literówka. :-)Scanner
odczytuje tylko pierwsze 1024 bajty z pliku. Spójrz na kod źródłowy. Odczytuje bufor i sprawdza to za pomocą tego wyrażenia regularnego. To zawsze ważne - wtedy zwraca całą zawartość bufora. Domyślnie bufor ma rozmiar 1024 bajtów.Files.readAllLines()
. W przypadku starszych środowisk JREFileInputStream.read()
jest prawdopodobnie najlepsze. Nie jestem pewien, czy jest przenośny na wszystkie platformy (tzn. Ctl-Z jest rozpoznawany wszędzie) i łatwo jest przeoczyć wykonanieScanner.close()
.Jeśli używasz Java 5/6, możesz użyć Apache Commons IO do odczytu pliku na łańcuch. Klasa zawiera
org.apache.commons.io.FileUtils
kilka metod odczytu plików.np. metodą
FileUtils#readFileToString
:źródło
Od wersji Java 11 możesz to zrobić jeszcze prościej:
Źródło: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/Files.html#readString(java.nio.file.Path)
źródło