Wygląda na to, że istnieją różne sposoby odczytywania i zapisywania danych z plików w Javie.
Chcę odczytać dane ASCII z pliku. Jakie są możliwe sposoby i ich różnice?
Moim ulubionym sposobem na odczytanie małego pliku jest użycie BufferedReader i StringBuilder. Jest to bardzo proste i do rzeczy (choć nie jest szczególnie skuteczne, ale wystarczająco dobre dla większości przypadków):
BufferedReader br = new BufferedReader(new FileReader("file.txt"));
try {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
}
String everything = sb.toString();
} finally {
br.close();
}
Niektórzy zwrócili uwagę, że po Java 7 powinieneś użyć try-with-resources (tj. Funkcje automatycznego zamykania):
try(BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
}
String everything = sb.toString();
}
Kiedy czytam ciągi takie jak ten, zwykle i tak chcę wykonać jakąś obsługę ciągów na linię, więc wtedy idę na tę implementację.
Chociaż jeśli chcę po prostu wczytać plik do Stringa, zawsze używam metody Apache Commons IO z klasą IOUtils.toString(). Możesz rzucić okiem na źródło tutaj:
http://www.docjar.com/html/api/org/apache/commons/io/IOUtils.java.html
FileInputStream inputStream = new FileInputStream("foo.txt");
try {
String everything = IOUtils.toString(inputStream);
} finally {
inputStream.close();
}
A jeszcze prostsze z Javą 7:
try(FileInputStream inputStream = new FileInputStream("foo.txt")) {
String everything = IOUtils.toString(inputStream);
// do something with everything string
}
ASCII jest plikiem TEKSTOWYM, więc używałbyś Readers
do odczytu. Java obsługuje również czytanie z plików binarnych używając InputStreams
. Jeśli odczytywane pliki są ogromne, chciałbyś użyć BufferedReader
na wierzchu FileReader
aby poprawić wydajność odczytu.
Przejdź przez ten artykuł jak używać Reader
.
Polecam również pobranie i przeczytanie tej wspaniałej (ale darmowej) książki o nazwie Thinking In Java.
W Javie 7:
new String(Files.readAllBytes(...))
(docs) lub
Files.readAllLines(...)
W Javie 8:
Files.lines(..).forEach(...)
Najprostszym sposobem jest użycie klasy Scanner
w Javie i obiektu FileReader. Prosty przykład:
Scanner in = new Scanner(new FileReader("filename.txt"));
Scanner
posiada kilka metod do odczytu łańcuchów, liczb, itp... Możesz poszukać więcej informacji na ten temat na stronie dokumentacji Javy.
Na przykład czytanie całej zawartości do String
:
StringBuilder sb = new StringBuilder();
while(in.hasNext()) {
sb.append(in.next());
}
in.close();
outString = sb.toString();
Również jeśli potrzebujesz konkretnego kodowania możesz użyć tego zamiast FileReader
:
new InputStreamReader(new FileInputStream(fileUtf8), StandardCharsets.UTF_8)