javaEE之有关Stream流的几种操作方式

一、字节流

(1)FileInputStream文件输入流

 int read(byte[] b) 
      从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。 
  int read(byte[] b, int off, int len) 
      从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。 

(2)FileOutputStream文件输出流

 void write(byte[] b) 
      将 b.length 个字节从指定 byte 数组写入此文件输出流中。 
 void write(byte[] b, int off, int len) 
          将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。 
 void write(int b) 
      将指定字节写入此文件输出流。 

二、字符流(用来读写中文时方便)

(1)FileReader字符输入流

(2)FileWriter字符输出流

三、缓冲流(提高读写速度)

(1)BufferedInputStream字节缓冲输入流

(2)BufferedOutputStream字节缓冲输入流

(3)BufferedReader字符缓冲输入流

特有的方法,当你要对于逐行操作时
String readLine() 
      读取一个文本行。 

(4)BufferedWriter字符缓冲输出流

 void newLine() 
      写入一个行分隔符。 
 void write(char[] cbuf, int off, int len) 
          写入字符数组的某一部分。 
 void write(int c) 
          写入单个字符。 
 void write(String s, int off, int len) 
          写入字符串的某一部分。 

四、转换流

这个流有两个作用

(1)用于以指定的编码方式打开文件

InputStreamReader(InputStream in, String charsetName) 创建使用指定字符集的 InputStreamReader。

(2)转换某一种流为指定的流,当只有字节流时,你想用到字符流操作中文时

 FileInputStream fis = new FileInputStream("javaEE\\src\\day10\\demo03\\1.txt");
 InputStreamReader isr = new InputStreamReader(fis);
 BufferedReader br=new BufferedReader(isr);

五、序列化流(用于搞对象的流)

(1)序列化(把对象以字节的方式写入文件中)

ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("javaEE\\src\\day10\\demo04\\person.txt"));
os.writeObject(new Person("liming",20));

(2)反序列化(从文件中把对象读出来)

ObjectInputStream os = new ObjectInputStream(new FileInputStream("javaEE\\src\\day10\\demo04\\person.txt"));
System.out.println(os.readObject());

(3)当你想要传入多个对象时,你可以先把对象存到集合中在对集合进行序列化

(4)当对对象序列化时要在对象中加入下面的代码,防止你修改对象的属性时,序列化不成功

private static final long serialVersionUID=1L;

六、打印流

(1)System.out.println()

(2)从控制台输入到指点文件中

System.out.println("控制台");
PrintStream p=new PrintStream("javaEE\\src\\day10\\dem\1.txt");
System.setOut(p);
System.out.println("文件中");

七、用于读取配置信息的流

(1)能够使用Properties的load方法加载文件中配置信息

java.util.Properties 继承于 Hashtable ,来表示一个持久的属性集。它使用键值结构存储数据,每个键及其 对应值都是一个字符串。该类也被许多Java类使用,比如获取系统属性时, System.getProperties 方法就是返回 一个 Properties 对象。 

void load(InputStream inStream) 
      从输入流中读取属性列表(键和元素对)。 

//创建Properties对象
Properties prop = new Properties();
//通过load方法加载指定的配置文件
prop.load(new FileReader("javaEE\\src\\day09\\demo03\\1.txt"));
//通过stringPropertyNames()方法来获取配置文件的所有键
Set<String> strings = prop.stringPropertyNames();
//遍历键值来获取value属性,来获取配置信息
for (String string : strings) {
    System.out.println(string+"="+prop.get(string));
}

(2)能够使用Properties的store方法写入配置信息

 void store(OutputStream out, String comments) 
      以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。

FileWriter fw = new FileWriter("javaEE\\src\\day09\\de\1.txt");
prop.store(fw,"abc");//"abc"是配置文件的名字

八、用于操作集合数组的Stream流(学此流你必须先学会lambda和常用的函数式接口)

两种产生流的方式

  1. 集合名.stream()
  2. Stream.of(数组名)

(1)forEach(里面是Consumer消费型接口):可以用lambda表达式来遍历集合和数组

stream.forEach(i-> System.out.println(i));

(2)filter(里面是Predicate接口):用于对流中的数据进行过滤

Stream<T> filter(Predicate<? super T> predicate);

(3)map(里面是Function转换型接口):用于将流中的数据转换为另外一种数据

<R> Stream<R> map(Function<? super T, ? extends R> mapper)

(4)count():用于统计流中的数据的个数

long count()

(5)limit():用于截取流,获取前n个数据

Stream<T> limit(long n);

(6)skip():用于截取流,跳过前n个数据,留下剩余的数据

 Stream<T> skip(long n);

(7)concat():用于合并两个流,新的流中就包含了两个流中的数据

static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b)
-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!