Java基础 -- IO流
IO流
1.概念
- 
流:数据传输通道
 - 
模型:采用Decorator装饰者模式。依照功能可以对流进行分类。
 
2.分类
- 
按数据流方向:
- 输入流
 - 输出流
 
 - 
按传输类型:
这4种均是抽象流,为所有IO流的超类
- 字节流(用来处理图像,视频,PPT,Word)
- Reader
 - Writer
 
 - 字符流(只能处理纯文本)
- InputStream
 - OutputStream
 
 
字符字节流区别:
- 
字节输出流没有缓冲区,直接输出,字符流必须经过缓冲区,正常情况下只有调用close()才会输出,否则需要手动调用flush()才可输出
字节 字符 读写单位 Byte 字符(根据码表映射) 处理对象 视频,图片 纯文本(优先考虑)  
 - 字节流(用来处理图像,视频,PPT,Word)
 - 
按功能:
- 节点流:特定节点读取数据的过程
 - 处理流:连接和封装一个已存在的流,通过该封装流调用实现数据读写。ep:BufferedReader。处理流的构造方法传入一个流对象作参数。
 
 - 
字符流:Java中采用Unicode标准,字符流指基于字节流读取查询对应的Unicode表。
 
3.特性
- FIFO,先写入的数据也先被读取
 - 顺序存取,不可随机访问。(RandomAccessFile可从任意位置访问IO,此类继承自Object)
 - 只读/只写,流只有一种功能,传输通道同时存在需要两个流。
 
4.五类一接口
Java.io包:
- 
类
- 
File:文件特征与管理,对文件系统中文件以及文件夹进行封装的对象,可通过对象的思想操作文件和文件夹,保存文件或目录的元数据信息,包括文件名,文件大小,最后修改时间,是否可读,获取文件路径,判断文件是否存在,获取当前文件列表,创建/删除文件或目录
 - 
InputStream
 - 
OutputStream
 - 
Reader
 - 
Writer
RandomAccessFile:随机文件操作
 
 - 
 - 
接口:Serializable
 
5.IO流对象

6.System类
| 输入输出 | 读取方式 | 
|---|---|
| System.out(标准输出) | 显示器 | 
| System.err(标准错误输出) | 显示器 | 
| System.in(标准输入) | 键盘输入 | 
7.Scanner
//字节流套接
Scanner(InputStream source)
//字符流套接
Scanner(Readable source)
8.序列化
- 
序列化:具体对象数据 --> 二进制数据
- 实现方法:java.io.Serializable
 
 - 
反序列化:二进制数据 --> 具体对象数据
- 实现方法:Object readObject()方法从ObjectInputStream读取对象
 
 - 
- 
基本类型和String默认都实现了这个接口,所以不需要处理。
 - 
类中的一个属性不参与序列化:transient,表示标记的属性不参与序列化。
transient关键字:某些属性不需要保存。
private transient String name; - 
static定义的变量也不参与序列化。
 
 - 
 - 
标记接口:Serializable,Cloneable.
只定义了一种功能,没有具体内容。它的功能由JVM实现。
 
优先使用的:
| 输入流 | 输出流 | |
|---|---|---|
| 字节流 | Scanner(首选) | printStream(打印流) | 
| 字符流 | BufferReader(次选,缓冲流) | printWriter(打印流) | 
Scanner简单不赘述
BufferedReader
- 单字符
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BRRead {
    //单字符读写
    public static void main(String[] args) throws IOException {
        char c;
        //使用System.in创建BufferedReader
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("输入'q'退出:");
        /*读取:读取一个字符使用read()方法
            int read() throws IOException
         */
        do{
            c = (char)br.read();
            System.out.println("退出");
        }while(c != 'q');
    }
}
- 
字符串
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class BRReadLine { //多字符读取 public static void main(String[] args) throws IOException { String str; //System.in创建BufferedReader BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("请输入一行字符如'end'来结束"); /*读取一行字符 String readLine() throws IOException */ do{ str = br.readLine(); System.out.println("您输入了一行字符,已退出"); }while(!str.equals("end")); } } - 
FileInputStream
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class Fileinputstream { public static void main(String[] args) throws IOException { int i = 0; FileInputStream fi = null; try { fi = new FileInputStream("C:\\Users\\Administrator\\Desktop\\a.txt"); } catch (FileNotFoundException e) { System.out.println("找不到文件"); System.exit(-1); } try { int num = 0;//计数 while((i=fi.read()) != -1){ System.out.println((char)i); num++; } fi.close(); System.out.println("传输个数:"+num); } catch (IOException e) { System.out.println("读取文件错误"); } } } - 
FileOutputStream
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Fileoutputstream { public static void main(String[] args) throws IOException { int i = 0; FileInputStream fi = null; FileOutputStream fo = null; try { fi = new FileInputStream("C:\\Users\\Administrator\\Desktop\\a.txt"); fo = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\b.txt"); while((i=fi.read())!=-1){ fo.write(i); System.out.println((char)i); } fi.close(); fo.close(); System.out.println("文件已复制"); } catch (IOException e) { System.out.println("文件复制错误"); System.exit(-1); } } } - 
Reader,Writer
import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class Filereaderwriter { public static void main(String[] args) throws IOException { int i = 0; try { FileReader fr = new FileReader("C:\\Users\\Administrator\\Desktop\\a.txt"); FileWriter fw = new FileWriter("C:\\Users\\Administrator\\Desktop\\c.txt"); while((i=fr.read())!=-1){ fw.write(i); System.out.println((char)i); } fr.close(); fw.close(); } catch (IOException e) { System.out.println("文件复制错误"); } } } 

                
            
        
浙公网安备 33010602011771号