在Java8中,可以使用Files.lines读取文件的流。
c://lines.txt – 用于测试的简单文本文件
line1
line2
line3
line4
line5
核心代码:
Write to file using BufferedWriter
//Get the file reference
Path path = Paths.get("c:/output.txt");
//Use try-with-resource to get auto-closeable writer instance
try (BufferedWriter writer = Files.newBufferedWriter(path))
{
writer.write("Hello World !!");
}
Write to file using Files.write()
String content = "Hello World !!";
Files.write(Paths.get("c:/output.txt"), content.getBytes());
下面的例子中,lines()方法返回字符串流,字符串使用的是UTF-8编码。如下:
Files.lines(Paths.get("D:\\jd.txt"), StandardCharsets.UTF_8).forEach(System.out::println);
或者
System.out.println(new String(readAllBytes(get("d:/jd.txt"))));
1. Java 8 读取文件+流
TestReadFile.java
package com.ikeepstudying.java8;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Stream;
public class TestReadFile {
public static void main(String args[]) {
String fileName = "c://lines.txt";
//read file into stream, try-with-resources
try (Stream stream = Files.lines(Paths.get(fileName))) {
stream.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出结果
line1
line2
line3
line4
line5
2. Java 8 读取文件+流+额外
这个例子说明了如何使用数据流过滤内容,其全部内容转换为大写并返回一个列表。
TestReadFile2.java
package com.ikeepstudying.java8;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class TestReadFile2 {
public static void main(String args[]) {
String fileName = "c://lines.txt";
List list = new ArrayList<>();
try (Stream stream = Files.lines(Paths.get(fileName))) {
//1. filter line 3
//2. convert all content to upper case
//3. convert it into a List
list = stream
.filter(line -> !line.startsWith("line3"))
.map(String::toUpperCase)
.collect(Collectors.toList());
} catch (IOException e)