Obecnie próbuję odczytać linie z pliku tekstowego, który mam. Znalazłem na innym stackoverflow (Reading a plain text file in Java), że można użyć Files.lines (..). ForEach (..) Jednak nie mogę faktycznie dowiedzieć się, jak korzystać z każdej funkcji, aby przeczytać tekst po linii, Każdy wie gdzie szukać i jak to zrobić?Jak czytać z plików z Files.lines (...). ForEach (...)?
Odpowiedz
Files.lines(Path)
oczekuje argumentu Path
i zwraca wartość Stream<String>
. Stream#forEach(Consumer)
oczekuje argumentu Consumer
. Więc wywołaj metodę, podając ją jako Consumer
. Ten obiekt będzie musiał zostać zaimplementowany, aby zrobić to, co chcesz dla każdej linii.
To jest Java 8, więc możesz użyć wyrażeń lambda lub odwołań do metod, aby podać argument Consumer
.
zawartość Przykładowy Test.txt
Hello
Stack
Over
Flow
com
kod do odczytu z tego pliku tekstowego przy użyciu lines()
i forEach()
metod.
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;
public class FileLambda {
public static void main(String JavaLatte[]) {
Path path = Paths.get("/root/test.txt");
try (Stream<String> lines = Files.lines(path)) {
lines.forEach(s -> System.out.println(s));
} catch (IOException ex) {
// do something or re-throw...
}
}
}
Możesz użyć odwołania do metody:' System.out :: println', nadal byłoby to przetłumaczone na ten sam kod bajtowy. –
I jeszcze jeden punkt: nie powinieneś zapisywać 'Stream' jako zmiennej, ponieważ może to wprowadzać w błąd niektórych czytelników, którzy używają go dwukrotnie lub więcej razy, co jest zabronione. Zamiast tego możesz zapisać go do 'List' za pomocą' readAllLines', a następnie użyć metody 'stream()' na tej liście. –
Użyj try-for-resources dla strumienia, aby zapewnić automatyczne zamknięcie: 'try (Stream
Z Java 8, jeśli plik istnieje w classpath
:
Files.lines(Paths.get(ClassLoader.getSystemResource("input.txt")
.toURI())).forEach(System.out::println);
Stworzyłem próbkę, można użyć Stream filtrować wejście/
public class ReadFileLines {
public static void main(String[] args) throws IOException {
Stream<String> lines = Files.lines(Paths.get("C:/SelfStudy/Input.txt"));
// System.out.println(lines.filter(str -> str.contains("SELECT")).count());
//Stream gets closed once you have run the count method.
System.out.println(lines.parallel().filter(str -> str.contains("Delete")).count());
}
}
Sample .tekst.
SELECT Every thing
Delete Every thing
Delete Every thing
Delete Every thing
Delete Every thing
Delete Every thing
Delete Every thing
Metoda ta jest już czyta każdy wiersz pliku, można przechowywać wiersz w zmiennej 'String' i zrobić coś innego z nim ... –
Uhm, należy przeczytać o Java 8 i lambdas; konkretnie tutaj, o 'Consumer' i pojęciu pojedynczej abstrakcyjnej metody. – fge