位置:首页 > 易百教程 > Java8流逐行读取文件

Java8流逐行读取文件

在Java8中,可以使用Files.lines读取文件的流。

c://lines.txt – 用于测试的简单文本文件
line1
line2
line3
line4
line5

1. Java 8 读取文件+流

TestReadFile.java

package com.yiibai.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<String> 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.yiibai.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<String> list = new ArrayList<>();

		try (Stream<String> 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) {
			e.printStackTrace();
		}

		list.forEach(System.out::println);

	}

}

输出结果

LINE1
LINE2
LINE4
LINE5

3. BufferedReader + Stream

一种新的方法lines() ,已经在JDK1.8已经添加,它让 BufferedReader 返回流的内容。

TestReadFile3.java

package com.yiibai.java8;

import java.io.BufferedReader;
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;

public class TestReadFile3{

	public static void main(String args[]) {

		String fileName = "c://lines.txt";
		List<String> list = new ArrayList<>();

		try (BufferedReader br = Files.newBufferedReader(Paths.get(fileName))) {

			//br returns as stream and convert it into a List
			list = br.lines().collect(Collectors.toList());

		} catch (IOException e) {
			e.printStackTrace();
		}
	
		list.forEach(System.out::println);

	}

}

输出结果

line1
line2
line3
line4
line5

4. BufferedReader和Scanner

上面我们已经足够了解Java8和流,现在重温经典BufferedReader(JDK1.1)和Scanner (JDK1.5)的例子来逐行读取文件中的行。

4.1 BufferedReader + 尝试使用资源的例子。

TestReadFile4.java

package com.yiibai.core;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class TestReadFile4{

	public static void main(String args[]) {

		String fileName = "c://lines.txt";

		try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {

			String line;
			while ((line = br.readLine()) != null) {
				System.out.println(line);
			}

		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}

4.2 Scanner+使用资源的例子。

TestReadFile5.java

package com.yiibai.core;

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class TestReadFile5 {

	public static void main(String args[]) {

		String fileName = "c://lines.txt";

		try (Scanner scanner = new Scanner(new File(fileName))) {

			while (scanner.hasNext()){
				System.out.println(scanner.nextLine());
			}

		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}

参考

  1. Java 8 File.lines()
  2. Java 8 Stream
  3. Java BufferedReader




标签:Java8        逐行读取    文件