Java基础(八)——IO流5_其他流
一、其他
1、System.in、System.out(标准输入、输出流)
System.in:标准的输入流,默认从键盘输入。
System.out:标准的输出流,默认从控制台输出。
改变标准输入输出(System下的静态方法)。
void setIn(InputStream in):重新分配"标准"输入流
void setOut(PrintStream out):重新分配"标准"输出流
2、PrintStream、PrintWriter(打印流)
代码示例:将内存数据打印到文件
1 public class Main {
2 public static void main(String[] args) {
3 try {
4 FileOutputStream fos = new FileOutputStream(new File("F:\\hello.txt"));
5
6 // 创建打印输出流,设置为自动刷新模式(写入换行符或字节 '\n' 时都会刷新输出缓冲区)
7 PrintStream ps = new PrintStream(fos, true);
8
9 // 把标准输出流(控制台输出)改成文件
10 System.setOut(ps);
11
12 for (int i = 0; i <= 15; i++) {
13 System.out.print(i);
14 if (i % 5 == 0) {
15 System.out.println();
16 }
17 }
18 } catch (Exception e) {
19 }
20 }
21 }
22
23 // 结果.文件:F:\\hello.txt
24 // 内容:
25 0
26 12345
27 678910
28 1112131415
代码示例:打印系统环境信息
1 public class Main {
2 public static void main(String[] args) throws Exception {
3 Properties properties = System.getProperties();
4 properties.list(new PrintStream("F:\\hello.txt"));
5 }
6 }
3、DataInputStream 、DataOutputStream(数据流)
作用:用于读取或写出基本数据类型的变量或字符串。
代码示例:写。将内存中的字符串、基本数据类型的变量写出到文件中。
1 public class Main {
2 public static void main(String[] args) {
3 try (DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.dat"));) {
4
5 dos.writeUTF("张三");
6 dos.writeInt(23);
7 dos.writeBoolean(true);
8
9 dos.flush(); // 刷新操作,将内存中的数据写入文件
10 } catch (Exception e) {
11 }
12 }
13 }
代码示例:读。将文件中的数据读到内存中。需要与保存的数据的顺序一致!
1 public class Main {
2 public static void main(String[] args) {
3 try (DataInputStream dis = new DataInputStream(new FileInputStream("data.dat"));) {
4 String name = dis.readUTF();
5 int age = dis.readInt();
6 boolean isMale = dis.readBoolean();
7
8 System.out.println("name = " + name);
9 System.out.println("age = " + age);
10 System.out.println("isMale = " + isMale);
11 } catch (Exception e) {
12 }
13 }
14 }
4、管道输入流、管道输出流
管道输入/输出流和普通的文件输入/输出流或者网络输入/输出流不同之处在于,它主要用于线程之间的数据传输,而传输的媒介为内存。
管道输入/输出流主要包括了如下4种具体实现:PipedOutputStream、PipedInputStream、PipedReader和PipedWriter,前两种面向字节,而后两种面向字符。

代码示例:
1 public class Main {
2
3 public static void main(String[] args) {
4 try (PipedWriter out = new PipedWriter();
5 PipedReader in = new PipedReader();) {
6
7 // 将输入流和输出流进行连接,否则会出现IO错误
8 out.connect(in);
9
10 // 开启一个线程用于读取管道流
11 new Thread(new Print(in), "printThread").start();
12
13 // 接收键盘的输入,并写入到管道流中
14 int receive = 0;
15 while ((receive = System.in.read()) != -1) {
16 out.write(receive);
17 }
18 } catch (Exception e) {
19 }
20 }
21
22
23 static class Print implements Runnable {
24 private final PipedReader in;
25
26 public Print(PipedReader in) {
27 this.in = in;
28 }
29
30 @Override
31 public void run() {
32 int receive = 0;
33 try {
34 while ((receive = in.read()) != -1) {
35 System.out.print((char) receive);
36 }
37 } catch (IOException ex) {
38 }
39 }
40 }
41 }
上述代码,创建了线程printThread,它用来接收main线程的输入,任何main线程的输入均通过PipedWriter写入,而printThread在另一端通过PipedReader将内容读出并打印。
注意:对于Piped类型的流,必须先要进行绑定,也就是调用connect()方法,如果没有将输入/输出流绑定起来,对于该流的访问将会抛出异常。
参考文档:《Java并发编程的艺术》
Java基础(八)——IO流5_其他流的更多相关文章
- java基础之IO流(二)之字符流
java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...
- java基础之IO流(一)字节流
java基础之IO流(一)之字节流 IO流体系太大,涉及到的各种流对象,我觉得很有必要总结一下. 那什么是IO流,IO代表Input.Output,而流就是原始数据源与目标媒介的数据传输的一种抽象.典 ...
- Java基础之IO流整理
Java基础之IO流 Java IO流使用装饰器设计模式,因此如果不能理清其中的关系的话很容易把各种流搞混,此文将简单的几个流进行梳理,后序遇见新的流会继续更新(本文下方还附有xmind文件链接) 抽 ...
- Java基础八--构造函数
Java基础八--构造函数 一.子父类中构造函数的特点 1.1 为什么在子类构造对象时,发现,访问子类构造函数时,父类也运行了呢? 原因是:在子类的构造函数中第一行有一个默认的隐式语句. super( ...
- 【java基础】]IO流
IO流 概念: 流的概念源于unix中管道(pipe)的概念,在unix中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备,外部文件等 一个流,一定能够会有源和去向(目的地),他 ...
- java基础44 IO流技术(输出字节流/缓冲输出字节流)和异常处理
一.输出字节流 输出字节流的体系: -------| OutputStream:所有输出字节流的基类(抽象类) ----------| FileOutputStream:向文件输出数据的输出字节流(把 ...
- java基础之io流总结一:io流概述
IO流概念: 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.io流是实现输入和输出的基础,可以方便的实现数据的输入和输出操作. IO流的分类: 根据处理数据类型的不同分为:字符流 ...
- Java基础学习总结(13)——流IO
一.JAVA流式输入/输出原理 流是用来读写数据的,java有一个类叫File,它封装的是文件的文件名,只是内存里面的一个对象,真正的文件是在硬盘上的一块空间,在这个文件里面存放着各种各样的数据,我们 ...
- Java基础系列——IO流
---恢复内容开始--- Java对数据的操作都是通过流的方式,数据的输入和输出是相对内存来说的,将外设的数据读到内存:输入流:将内存的数据写到外设:输出流. 流按操作数据分为两种:字节流,字符流. ...
- 黑马程序员——JAVA基础之IO流FileReader,FileWriter
------- android培训.java培训.期待与您交流! ---------- IO(Input Output)流 IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 J ...
随机推荐
- Output of C++ Program | Set 8
Predict the output of following C++ programs. Question 1 1 #include<iostream> 2 using namespac ...
- 注册页面css版本
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Redis - 2 - 聊聊Redis的RDB和AOF持久化 - 更新完毕
1.RDB 1.1).RDB是什么? RDB,全称Redis Database RDB是Redis进行持久化的一种方式,当然:Redis默认的持久化方式也是RDB 1.2).Redis配置RDB 1. ...
- 使用IDEA整合spring4+spring mvc+hibernate
配置文件 spring-mvc.xml 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans x ...
- 熔断和降级的初步详解实现(NET Core控制台输出讲解Polly)
概述 很多朋友包括我,对于"八股文"可以说是比较熟练的,每次面试前都会专研不少东西,各种固定答案.专业术语都是张口就来,一个字,稳. 八股文:程序员八股文是指程序员在面试过程中经常 ...
- mit6.830-lab2-常见算子和 volcano 执行模型
一.实验概览 github : https://github.com/CreatorsStack/CreatorDB 这个实验需要完成的内容有: 实现过滤.连接运算符,这些类都是继承与OpIterat ...
- LuoguP7379 [COCI2018-2019#6] Lun 题解
Content 判断使一个长度为 \(n\) 的银行卡号码(有一个空缺)合法,空缺里面填入的最小数字. 数据范围:\(n\in[1,100]\). Solution 由于只有一个空缺,因此我们可以考虑 ...
- Birt报表设置自定义的值
比如数据库查出该字段的值有"no",有"yes",那么想要根据当是no是显示"未完成",当是yes时显示"已完成" 可以 ...
- SpringBoot结果集包装类
1.前言 在SpringBoot项目中.看了一部分代码.发现一般的接口以JSON形式返回最佳.接口规范遵照RESTFUL风格来写.返回的结果集呢.借助包装类来包装.这样有利于前后端的交互.写出来的代码 ...
- IDEA报错 Error:(24, 35) java: 常量字符串过长
修改设置