java中关于I/O流的介绍

I/O流,就是用来读写数据的,也称为输入,输出流

目录

1.I/O流的简介

2.I/O流的分类

 3.I/O流体系

4.文件字节输入流 FileInputStream--读取文件数据

5.文件字节输出流OutPutStream--写数据到文件

6.两种资源释放操作

7.字符输入流Reader

8.字符输出流Write

9.字节流字符流如何选择


1.I/O流的简介

I表示input,把硬盘文件中的数据读入到内存中的过程,称之为输入,负责读。

O表示output,把内存的数据写入硬盘的过程,为输出,负责写。

2.I/O流的分类

1.按照流的方向:可以分为输入流,输出流

2.按照流中数据的最小单位:分为字符流和字节流

 3.I/O流体系

                        字符流                        字节流

Writer

Reader

InputStream

OutputStream

字符输入字符输出字节输入字节输出

I/O流体系因为是抽象,所以不能直接用,需要用他们的子类。

4.文件字节输入流 FileInputStream--读取文件数据

FileInputStream是字节输入流inputStream的子类

FileInputStream的作用:以内存为基准,把磁盘文件中的数据以字节的形式读取到内存中去。
 

使用

 InputStream is = new FileInputStream("文件路径");

方法

read():每次读取一个字节,读取完毕后返回-1;

read(byte[] buffer):每次读取一个数组,没有数组可读返回-1。

当读取中文的时候,可能会出现乱码。这时候该如何解决呢?

  解决:定义一个与文件一样大的字节数组,一次性读取完文件的全部字节。

        File f=new File("文件路经");
        InputStream is=new FileInputStream(f);

        byte[] buffer=new byte[(int)f.length()];
        int len= is.read(buffer);
        System.out.println("读取了"+len);
        System.out.println("文件大小"+f.length());
        System.out.println(new String(buffer));

在java也提供了相应的方法 ---readAllBytes()

 byte[] buffer= is.readAllBytes();
 System.out.println(new String(buffer));

5.文件字节输出流OutPutStream--写数据到文件

 public static void main(String[] args) throws Exception {
        OutputStream outputStream =new FileOutputStream("D:\\java\\itheima\\file-io-app\\src\\out01.txt");

        //向新创建的文件中添加数据
        outputStream.write('a');
        outputStream.write(97);
        //outputStream.write('兹');//汉字会出现乱码

        //向文件中添加汉字内容
        byte[] b="加油年轻人".getBytes();
        outputStream.write(b);

        outputStream.flush();//刷新数据,可以继续使用
        outputStream.close();//释放资源,包含刷新数据,close后不能使用

    }

文件输出

6.两种资源释放操作

1.手动释放

try{

        可能会出现异常的代码

}

catch(异常类名 变量名  ){

        异常执行的操作

}

finally{

        执行资源释放操作

}

2.自动释放

自动释放有两种,分别是JDK7和JDK9提供的。

这是JDK7,这种比较常用。

try(定义流对象){

        可能会出现异常的代码

}

catch{

        异常处理代码

}

JDK9:

定义输入流对象

定义输出流对象

try(输入流对象;输出流对象){

        可能会出现异常的代码

}

catch{

        异常处理代码

}

7.字符输入流Reader

更方便的读取汉字

 Reader re=new FileReader("D:\\java\\itheima\\file-io-app\\src\\data02.txt");

        int code;
        while ((code=re.read()) != -1){//当返回-1的时候不在读取
            System.out.print((char) code);
        }

8.字符输出流Write

向文件中写入数据

 Writer re=new FileWriter("目标文件");

    re.write('a');

    re.write("dadadd");

    char[] a="我爱学习".toCharArray();
    re.write(a,0,3);

    re.close();

9.字节流字符流如何选择

字节流适合做一切文件数据的拷贝(音视频,文本)

字节流不适合读取中文内容

字符流适合做文本文件的操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值