Tôi hiện đang cố gắng đọc các dòng từ một tệp chỉ có văn bản mà tôi có. Tôi tìm thấy trên stackoverflow khác (Reading a plain text file in Java) mà bạn có thể sử dụng Files.lines (..). ForEach (..) Tuy nhiên tôi không thể thực sự tìm ra cách sử dụng cho từng chức năng để đọc từng dòng văn bản, Bất cứ ai biết nơi để tìm kiếm hoặc làm thế nào để làm như vậy?Cách đọc từ tập tin với Files.lines (...). ForEach (...)?
Trả lời
Files.lines(Path)
mong đợi đối số Path
và trả về một Stream<String>
. Stream#forEach(Consumer)
mong đợi đối số Consumer
. Vì vậy, hãy gọi phương thức, chuyển nó qua một số Consumer
. Đối tượng đó sẽ phải được thực hiện để làm những gì bạn muốn cho mỗi dòng.
Đây là Java 8, vì vậy bạn có thể sử dụng biểu thức lambda hoặc tham chiếu phương thức để cung cấp đối số Consumer
.
nội dung mẫu của test.txt
Hello
Stack
Over
Flow
com
Mã để đọc từ tập tin văn bản này sử dụng lines()
và forEach()
phương pháp.
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...
}
}
}
Bạn có thể sử dụng tham chiếu phương thức:' System.out :: println', nó vẫn được dịch sang cùng bytecode. –
Và một điểm nữa: bạn không nên lưu trữ 'Stream' là biến vì nó có thể gây nhầm lẫn cho một số độc giả sử dụng nó hai lần hoặc nhiều hơn, điều đó bị cấm. Thay vào đó, bạn có thể lưu nó vào 'List' với' readAllLines', sau đó sử dụng phương thức 'stream()' trên danh sách này. –
Sử dụng try-with-resources cho luồng để đảm bảo luồng được tự động đóng: 'try (Stream
Với Java 8, nếu tập tin tồn tại trong một classpath
:
Files.lines(Paths.get(ClassLoader.getSystemResource("input.txt")
.toURI())).forEach(System.out::println);
tôi đã tạo ra một mẫu, bạn có thể sử dụng Stream để lọc đầu vào/
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 .txt.
SELECT Every thing
Delete Every thing
Delete Every thing
Delete Every thing
Delete Every thing
Delete Every thing
Delete Every thing
- 1. Đọc từ tập tin
- 2. Cách đọc nội dung tập tin từ một tập tin?
- 3. Đọc tập tin từ torrent
- 4. Mở tập tin và đọc từ tập tin Objective-c
- 5. Đọc từ tập tin sử dụng fgets
- 6. Đọc một tập tin .vtk với python
- 7. Đọc từ tập tin trong eclipse
- 8. Đọc giá trị null từ tập tin
- 9. C# làm cho tập tin đọc/ghi từ chỉ đọc
- 10. Đọc tập tin để stdout với xoắn
- 11. Đọc tập tin plist
- 12. Cách đọc thẻ tập tin MP3
- 13. Đọc tập tin xlsx với POI (SXSSFWorkbook)
- 14. Cách đọc tập tin hiệu quả nhất
- 15. Đọc các tập tin MP3
- 16. Java - Đọc tập tin XML
- 17. đọc dòng đồng bộ từ tập tin trong Node.js
- 18. ints Đọc từ một tập tin trong Chuck
- 19. đọc tập tin trong classpath
- 20. làm thế nào để đọc đạn từ tập tin RTF
- 21. Regex được chia nhỏ trong khi đọc từ tập tin
- 22. Files.lines để bỏ qua các dòng bị hỏng trong Java8
- 23. Đọc tên tập tin từ một thư mục
- 24. Đọc từ tập tin, xóa nó, ghi vào nó
- 25. Đọc một tập tin từ một vỏ mongo
- 26. ghi và đọc chuỗi đến/từ tập tin nội bộ
- 27. Đọc các tập tin từ một thư mục trong Scala
- 28. Đọc tập tin văn bản từ xa trong android
- 29. Nhiều chủ đề đọc từ cùng một tập tin
- 30. Đọc một tập tin * csproj trong C#
Đó phương pháp đã được đọc mỗi dòng của tập tin, bạn có thể lưu trữ các dòng trong một biến 'chuỗi' và làm điều gì đó khác với nó ... –
Uhm, bạn nên đọc về Java 8 và lambdas; cụ thể ở đây, về 'Consumer' và khái niệm về phương thức trừu tượng đơn lẻ – fge