JAVA基础 IO流一

3 篇文章 0 订阅

JAVA基础 IO流一

IO是指 文件内容的读入写出 ,上传下载。是 操作文件内部的内容非File操作文件外部。

流是指 一连串流动的数据,数据以先入先出的方式流动,就像是在管道中流动的水一样。

数据源 --> 数据 --> 目的地。

在java中,我们以程序为中心。根据数据的流向来判断是否是输入流还是输出流。

流的分类:
流向分类:
输入流(读书)
输出流(写信)
操作单元分类:
字节流 : 万能流 ****
字符流 : 纯文本
功能分类:
节点流: 真是基本做读写的
功能流: 扩展节点流的功能,提高节点的效率

InputStream

此抽象类是 表示输入字节流的所有类 的父类。

子类: ByteArrayInputStream 字节数组输入流:当管道的另一端是字节数组的时候使用
FileInputStream 文件输入流:当管道的另一端是文件的时候,操作文件的时候使用

​ FileInputStream文件输入流

从API中我们可以看到InputStream是一个抽象的类,因此要想使用他,我们可以用他的子类来实现,因为他的子类和他的方法是差不多的,也可以直接使用他的多态来使用。

创建流

1>InputStream is = new FileInputStream(“D:/heihei.txt”);

2>File file = new File(“D:/heihei.txt”);
InputStream is = new FileInputStream(file);

两种方式都是可以使用的,因为FileInputStream(File file),构造器中本身也是一个File的地址,分开写和一起写都是一样的。

读入

1>read() 从此输入流中读取一个字节的数据。 返回一个int类型,即字符的Unicode码。

int len = is.read();

2>利用循环重复读取。
read() 从此输入流中读取一个字节的数据。 返回值: 数据的下一个字节,如果到达文件的末尾, -1 。

每次读取一个字节的数据,当数据个数非常多, 重复读取多次–>循环简化

    int len = -1;  //result中存储读入到的数据(数据的字节|-1没读到)
    //重复读取
    while((len  = is.read())!=-1){
        //3.处理数据
        System.out.println((char)len);
    }

3> 每次只读一个字节,读取次数过多,过于浪费,每次读取一个字节数组的数据,循环读取
int read(byte[] b) 从此输入流 b.length最多 b.length字节的数据读 b.length字节数组。

		//字节数组 卡车
        byte[] car = new byte[1024];  //卡车
        int len = -1; //存储读入到数组中数据的个数

        //重复读取
        while((len=is.read(car))!=-1){
            System.out.println(new String(car,0,len));
        }

处理数据

1> 也就是打印数据,可以用强转成char类型的,这样方便我们读看。

​ System.out.println((char)len);

​ System.out.println((char)(is.read()));

关闭

close() 关闭此文件输入流并释放与该流关联的所有系统资源。

​ is.close();

OutputStream

字节输出流: 此抽象类是表示输出字节流的所有类的父类。

ByteArrayOutputStream 字节数组输出流 从程序写出内容到字节数组
FileOutputStream 文件输出流 从程序写出内容到文件

注意:
只要输出流就要提供关闭之前的刷出
目的地文件不存在会自动创建,但是如果目的地目录不存在,需要手动创建
写出目的地源文件中的内容默认覆盖不是追加,如果想要追加,需要在构造器中添加一个参数boolean append,true为追加,默认false覆盖

创建流

1>OutputStream os = new FileOutputStream(“D:/xixi.txt”);

2> File dest = new File(“D:/xixi.txt”);
OutputStream os = new FileOutputStream(dest,true); //true为追加

写出

void write(int b) 将指定的字节写入此文件输出流。
os.write(97);//b

write(byte[] b, int off, int len)

将从偏移量 off开始的指定字节数组中的 len字节写入此输出流。

刷出

os.flush();

关闭

os.close();

读入写出综合 copy

这是用的try catch 来捕获异常,也可以用throws抛出异常。我们平常使用抛出异常较多,因为idea等工具会自动给你抛出,比较方便。
创建流(输入流和输出流)
读入和写出
刷出
关闭

public static void main(String[] args){
        //1.创建流
        InputStream is = null;
        OutputStream os = null;
        try{
            //输入流
            is = new FileInputStream("D:space/ascii.png");
            //输出流
            os = new FileOutputStream("D:text/ascii.png");

            //2.读入,写出
            byte[] car = new byte[1024];
            int len= -1;
            //循环读写
            while((len=is.read(car))!=-1){
                //读入到字节数组中多少个len个数据,写出多少个
                os.write(car,0,len);
            }
            //3.刷出
            os.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4.关闭 (后打开的先关闭)
            if(os!=null){
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(is!=null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值