A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

小鲁哥哥白话笔记-IO流

大家在学到IO流的时候,向是突然见到了新世界一样,一下子多了好多不认识的类,各种名字和各种用法一下就把大家给绕晕了,不知道思路从何整理。下边以小鲁哥哥的视角带大家去看看小鲁哥哥是怎么去理解这些复杂和繁多的知识的。
首先我们先给IO流定一个大的框架,在一点点去给他拆分,这样我们就容易理解了。
IO流的分类(我们只按数据类型分类,这是学生问的最多的问题,如何去区分数据类型):
字节流:InputStream,OutputStream
字符流:Reader,Writer
有的同学就问了,是不是后缀带Stream的都是字节流,以(Reader或Writer)结尾的都是字符流?有的同学就问了OutputStreamWriter即带Stream又带Writer那这个是什么流?如果按我们同学说的只看后缀的话,那它是字符流,对,它就是一个字符流。他是负责把字节流转换成字符流的一个桥梁,行家都叫它“转换流”。
给大家看一看IO流的一些例子:
[Java] 纯文本查看 复制代码
public class OutputStreamWriterDemo {
public static void main(String[] args) throws IOException   {
//method2();
//创建输入流对象
BufferedReader br = new BufferedReader(new FileReader("SystemInOutDemo.java"));
//创建输出流对象
//OutputStream os = System.out;
//Writer w = new OutputStreamWriter(System.out);//多态,父类型引用指向子类对象
//BufferedWriter bw = new BufferedWriter(w);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
//进行数据的读写
String line;//用于存储读取到的数据
while((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
}
//释放资源
bw.close();
br.close();
}
 
private static void method2() throws FileNotFoundException, IOException {
//创建输入流对象
BufferedReader br = new BufferedReader(new FileReader("SystemInOutDemo.java"));
//创建输出流对象
//OutputStream os = System.out;
Writer w = new OutputStreamWriter(System.out);//多态,父类型引用指向子类对象
//进行数据的读写
String line;//用于存储读取到的数据
while((line = br.readLine()) != null) {
w.write(line);
w.write("\r\n");
}
//释放资源
w.close();
br.close();
}
 
private static void method() throws FileNotFoundException, IOException {
//创建输入流对象
BufferedReader br = new BufferedReader(new FileReader("SystemInOutDemo.java"));
//创建输出流对象
OutputStream os = System.out;
String line;//用于存储读取到的数据
while((line = br.readLine()) != null) {
os.write(line.getBytes());
os.write("\r\n".getBytes());
}
//释放资源
os.close();
br.close();
}
}
上述例子就是转换流的例子,其实大多数的流操作都是一样的,大家在写代码的时候,脑子里要有一个声音,IO流最后要关掉,释放资源。
我们课堂上还学习了其他的一些流,在这里我只给大家讲一讲他的用处和示例代码,详细的就不过多描述了,因为所有的流操作都是一样的,而且我们后期再实际开发中也不会写这些底层代码,我们都是用封装好的框架去实现数据的传递。
打印流-PrintWriter:打印流添加输出数据的功能,使它们能够方便地打印各种数据值表示形式。
示例代码:
[Java] 纯文本查看 复制代码
package com.itheima_06;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
 
/*
 * 打印流:
 * PrintStream
 * PrintWriter
 * 可以自动换行,println()
 * 不能输出字节,但是可以输出其他任意类型
 * 通过某些配置,可以实现自动刷新(只有在调用 println、printf 或 format才有用)
 * 也是包装流,不具备写出功能
 * 可以把字节输出流转换成字符输出流
 *
 * 注意:只能输出不能输入
 *
 *  
 */
public class PrintWriterDemo {
public static void main(String[] args) throws IOException  {
//创建打印流对象
PrintWriter pw = new PrintWriter("b.txt");
//写出数据
pw.write("hello");
pw.write("world");
pw.write("java");
//释放资源
pw.close();
}
}
标准输入流-InputStream in和标准输出流-PrintStream out
示例代码:
[Java] 纯文本查看 复制代码
package com.itheima_05;
/*
 * 标准输入输出流:
public static final InputStream in:字节输入流,用来读取键盘录入的数据
public static final int x;
InputStream is = System.in;
Scanner sc = new Scanner(System.in);
public static final PrintStream out:字节输出流,将数据输出到命令行
System.out.println();
 */
public class SystemInOutDemo {
}







0 个回复

您需要登录后才可以回帖 登录 | 加入黑马