IO流-创建流的几种方式

博客介绍了Java中创建流所需的几个类及方法,包括java.util.stream.Stream、java.util.Arrays、java.util.regex.Pattern和java.nio.file.Files。详细说明了各方法产生流的规则,如Stream类的of、empty等方法,Arrays类的stream方法等,帮助了解流的创建方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要的几个类及方法介绍:
java.util.stream.Stream:
  • static < T > Stream < T > of(T…values) : 产生一个元素为给定值的流;
  • static < T > Stream < T > empty(): 产生一个不包含任何元素的流;
  • static < T > Stream< T > generate(Supplier< T > s): 产生一个无限流,它的值是通过反复调用s构建的;
  • static < T >Stream< T >iterate(T seed ,UnartOperator< T > f) : 产生一个无限流,它的元素包含种子,在种子上调用f产生的值,在前一个元素上调用f产生的值;
java.util.Arrays
  • static < T > Stream< T > stream(T[] array,int start,int end): 产生一个流,它的元素是由数组中指定范围内的元素构成的;
java.util.regex.Pattern
  • **Stream < String > splitAsStream(CharSequence input): **产生一个流,它的元素是输入中由该模式界定的部分;
java.nio.file.Files
  • static Stream< String > lines(Path path)
  • static Stream< String > lines(Path path,Charset cs)

产生一个流,它的元素是指定文件中的行,该文件默认字符集为UTF-8,或者为指定字符集cs

各种流创建:
package IOdemo.IOExercise;

import java.io.IOException;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class CreatingStreams {
    public static <T> void show(String title,Stream<T> stream){
        final int SIZE=10;
        List<T> firstElements=stream.limit(SIZE+1).collect(Collectors.toList());
        System.out.print(title+": ");
        for(int i=0 ; i<firstElements.size();i++){
            if(i>0) System.out.print(", ");
            if(i<SIZE) System.out.print(firstElements.get(i));
            else System.out.print("...");
        }
        System.out.println();
    }
    public static void main(String[] args) throws IOException {
        Path path= Paths.get("E:\\javaSource2\\javacod\\20181121\\fos.txt");
        String contents=new String(Files.readAllBytes(path),StandardCharsets.UTF_8);
        //可变参数创建流
        Stream<String> words=Stream.of(contents.split("\r\n")); //
        show("words",words);
        Stream<String> song=Stream.of("可变参数","传多少都行","和上面一样多");

        //创建一个不包含任何元素的流
        Stream<String> empty=Stream.empty();

        //创建无限流
        Stream<String> echos=Stream.generate(()->"常量流");
        Stream<Double> randoms=Stream.generate(Math::random); //随机无限流
        show("randoms",randoms);

        //产生无限序列
        Stream<BigInteger> integers=Stream.iterate(BigInteger.ONE , n->n.add(BigInteger.ONE));
        show("integers",integers);
        //按照某个正则表达式来分割contents对象,
        Stream<String> wordsAnotherWay= Pattern.compile("//PL") //通过什么方式分割
                .splitAsStream(contents); 
        show("wordsAnotherWay", wordsAnotherWay);
        try{
            //指定文件的行创建流,静态方法
            Stream<String> lines=Files.lines(path,StandardCharsets.UTF_8);
            show("lines",lines);
        }catch(IOException e){
             e.printStackTrace();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值