Java I/O

Java I/O

一、IO的定义

  1. I:Input
  2. O:Output
  • 对数据流的输入、输出:
    输入的概念是往内存中读入硬盘上的数据,这叫读 read
    输出的概念是从内存中往硬盘上写数据,这叫做写 write
  • 通过IO可以完成硬盘文件的读和写

二、流的分类

1、按照流的方向分类

  • 往内存中去:叫做输入(Input)。或者叫做读(Read)。
  • 从内存中出来:叫做输出(Output)。或者叫做写(Write)。
输入流指的是:往内存中存入数据,叫做输入,也叫作读,Inputxxx
输出流指的是:从内存中往外取数据,叫做输出,也叫作写,Outputxxx

2、按照读取数据方式分类

  • 字节流:每次读取一个字节,8bit – 1Byte
  • 字符流:每次读取一个字符。读取的时候一次读取一个字符
字节流可以读取任何形式的数据:包括文本、音频、图像、视频等等。
字符流只能读取纯文本形式的数据,也就是txt格式的数据。
字节流没有缓冲区,是直接输出的。
字符流则是先输出到缓冲区
字节流未调用close()方法时便已经输出,而字符流只有先调用close()方法关闭缓冲区才能输出,若字符流想不关闭便输出则需手动调用flush()方法

3、如何区别字节流和字符流

  1. 字节流:以Stream结尾的都是字节流
    如:FileInputStream FileOutputStream BufferedInputStream BufferedOutputStream
  2. 字符流:以Reader或者是Writer结尾的都是字符流
    Reader Writer InputStreamReader OutputStreamWriter

三、IO包

  • 字节流:
  1. java.io.InputStream 字节输入流
  2. java.io.OutputStream 字节输出流
  • 字符流:
  1. java.io.Reader 字符输入流
  2. java.io.Writer 字符输出流
四种方法都是抽象类。(abstract class)
所有的流都实现了:
java.io.Closeable接口,都是可关闭的,都有 close() 方法。
流是一个管道,这个是内存和硬盘之间的通道,用完之后一定要关闭,不然会耗费(占用)很多资源。养成好习惯,用完流一定要关闭。
所有的输出流都实现了:
java.io.Flushable接口,都是可刷新的,都有 flush() 方法。
养成一个好习惯,输出流在最终输出之后,一定要记得flush()刷新一下。这个刷新表示将通道/管道当中剩余未输出的数据强行输出完(清空管道)刷新的作用就是清空管道。
如果没有flush()可能会导致丢失数据。

在java中只要“类名”以 Stream 结尾的都是字节流。以“ Reader/Writer ”结尾的都是字符流。

四、Java中重要的16个流

  1. 文件专属:
  • java.io.FileInputStream
  • java.io.FileOutputStream
  • java.io.FileReader
  • java.io.FileWriter
  1. 转换流:(将字节流转换成字符流)
  • java.io.InputStreamReader
  • java.io.OutputStreamWriter
  1. 缓冲流专属:
  • java.io.BufferedReader
  • java.io.BufferedWriter
  • java.io.BufferedInputStream
  • java.io.BufferedOutputStream
  1. 数据流专属:
  • java.io.DataInputStream
  • java.io.DataOutputStream
  1. 标准输出流:
  • java.io.PrintWriter
  • java.io.PrintStream
  1. 对象专属流:
  • java.io.ObjectInputStream
  • java.io.ObjectOutputStream
  1. File文件类
  • java.io.File

五、InputStream

InputStream是一个抽象类,无法创建对象,所以,我们要使用它的子类。
子类用得最多的是FileInputStream

    1.先要有输入源。有了输入源才能往内存中读入数据。
	2.FileInputStream的输入源是什么东西?File文件,所以先要有文件
	 InputStream is = new FileInputStream(String或者File);
	 String类型的参数表示:文件的路径
	 File类型的参数表示:一个文件对象
	3.FileInputStream就是一个输入的管道,通过这个管道中的read方法将硬盘上的数据
		读入到内存中

流的步骤:
	1.确定源
	2.打开流
	3.操作
	4.关闭流

六、IO流的应用

将C盘的a.txt文件移动到D盘

package com.myJava.IO;

import java.io.*;

public class MyCopy {
    public static void main(String[] args) {
        //将变量定义在外部方便后面关闭资源
        InputStream fis=null;
        OutputStream fos=null;
        try {
            fis = new FileInputStream("C:\\io\\a.txt");
            fos = new FileOutputStream("D:\\a.txt"); //如果D盘没有这个文件夹会自动创建
            //循环读取
            int n;
            while ((n=fis.read())!=-1) {  //文件读取完毕,read返回-1
                fos.write((char)n);    //读取一个字节就往D盘新建的a.txt文件中写入
            }
        }
        catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        finally {      //关闭资源
            if (fis !=null){
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fos !=null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值