JAVAday20 IO流

JAVAday20 IO流

一 IO流概述及其分类

1.什么是IO流

IO流用来处理设备之间的数据传输,java对数据的操作都是通过留的方式,操作的对象都在Io包中java.IO

2.IO流的分类

a:按照数据的流向(站在内存的角度)

输入流-------读入数据

输入流-------写出数据

b:按照数据类型

字节流:可以读写任何类型的文件,比如音频,视频,文本文件

字符流:只能读写文本文件

如果数据所在的文件通过windows自带的记事本打开并能读懂里面的内容,就是字符流;如果不知道是什么类型就用字节流。

二 IO流基类概述及FileOutStream的构造方法

1.IO流基类概述

a:字节流的抽象基类

InputStream ,OutputStream

b: 字符流的抽象基类

Reader ,Writer

由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀

2.字符流继承关系

writer:BufferWriter

​ OutputStreamWriter

​ PrintWriter

Reader: BufferReader

​ InputStreamReader

3.字节流继承关系

InputStream :FileIputStream

​ ByteArrayInputStream

		  ObjectInputStream

​ SequenceInputStream

OutputStream:FileOutputStream

​ ByteArrayOutputStream

​ ObjecyOutputStream

4.FileOutputStream的构造方法

public static void main(String[] args) throws IOException {
        //异常的处理 File
        //I/O InputStream 输入流  OutPutStream 输出流  处理设备之间的一个数据传输
        //流按照流向分:分为 输入流和输出流
        //按照读写文件的类型分:分为字节流(可以读写任意类型的文件)和字符流(读写文本文件)
        //字节流:
       //文件输入输出 流
        //文件输出流:写出数据
        //
        //FileOutputStream(File file)
        //创建一个向指定 File 对象表示的文件中写入数据的文件输出流。

        //FileOutputStream(String name)
        //创建一个向具有指定名称的文件中写入数据的输出文件流。
        File file = new File("a.txt");
        //file.createNewFile();
        //输入流,所关联的文件,如果该文件不存在 ,那么会自动帮你创建
        FileOutputStream out = new FileOutputStream(file);

        FileOutputStream fileOutputStream = new FileOutputStream("b.txt");
        //流用完之后必须释放资源
        out.close();
        fileOutputStream.close();

    }
}

5.FileOutputStream的三个writer()方法

public static void main(String[] args) throws IOException {
        //通过文件输出流,往他所关联的件中,写出数据
        FileOutputStream out = new FileOutputStream("a.txt");
        //写数据
        out.write(97); //一次写入一个字节
        out.write(98);
        out.write(99);
        out.write(100);
        out.write(300); //超过了一个字节,会丢弃掉多余字节
        byte[] bytes = {101, 102, 103, 104};
        out.write(bytes);//一次写入一个字节数组
        out.write(bytes, 2, 2);//一次写入字节数组的一部分,从2索引开始,写2个字节
        String str = "杨家有女初长成,养在深闺人未识";
        //UTF-8 编码 一个汉字占三个字节
        byte[] bytes1 = str.getBytes();//将一个字符串,转换成字节数组
        out.write(bytes1);
        out.close();
    }
}

6.FileOutputStream写入数据实现换行和追加写入

//换行
public static void main(String[] args) throws IOException {
        FileOutputStream out = new FileOutputStream("b.txt");
        out.write("回眸一笑百媚生,六宫粉黛无颜色".getBytes());
        out.write("\r\n".getBytes());//写入一个回车换行符
        out.write("回眸一笑百媚生,六宫粉黛无颜色".getBytes());
        out.write("\r\n".getBytes());//写入一个回车换行符
        out.write("回眸一笑百媚生,六宫粉黛无颜色".getBytes());
        out.write("\r\n".getBytes());//写入一个回车换行符
        out.write("回眸一笑百媚生,六宫粉黛无颜色".getBytes());

        //各个平台的换行符,都不一样
        //windows 平台 \r\n
        //Linux		\n
        //Mac		\r
        //流用完之后,必须释放资源
        out.close(); //关闭流
    }
//追加写入
 FileOutputStream out = new FileOutputStream("c.txt",true);
        out.write("回眸一笑百媚生,六宫粉黛无颜色".getBytes());
        out.write("\r\n".getBytes());//写入一个回车换行符
        out.write("回眸一笑百媚生,六宫粉黛无颜色".getBytes());
        //释放资源
        out.close();
    }

7.FileOutputStream读取数据

public static void main(String[] args) throws IOException {
        FileInputStream in = new FileInputStream("e.txt");
        //读取文件中的数据
        int len = in.read();//一次读取一个字节
        System.out.println(len);
        len = in.read();//一次读取一个字节
        System.out.println(len);
        len = in.read();//一次读取一个字节
        System.out.println(len);
        len = in.read();//一次读取一个字节
        System.out.println(len);
        len = in.read();//一次读取一个字节
        System.out.println(len);
        len = in.read();//一次读取一个字节
        System.out.println(len);
        len = in.read();//一次读取一个字节
        System.out.println(len); //读取不到返回-1

        in.close();//记得流用完之后,释放资源

缓冲思想

字节流一次读写一个数组的速度明显比一次读写一个字节的速度快,这是加入了数组这样的缓冲区。

//一次读取一个字节数组复制文本文件
 public static void main(String[] args) throws IOException {
        FileInputStream in = new FileInputStream("e.txt");
        byte[] bytes = new byte[1024];
        //读取字节数组的一部分
        //把读取到的字节的一部分,装入到缓冲区中
        int len = in.read(bytes, 0, 3);
        String s = new String(bytes, 0, 3);
        System.out.println(s);

        in.close();
    }

8.BufferoutputStream写入读取数据

为了缓冲方便,java直接提供了一种字节缓冲区流

//高效的字节输入输出流
private static void copyFile1() throws IOException {
        BufferedInputStream bfr = new BufferedInputStream(new FileInputStream("demo.mp3"));
        BufferedOutputStream bfw = new BufferedOutputStream(new FileOutputStream("demo2.mp3"));
        //读取一个字节写入一个字节
        int len=0;
        byte[] bytes = new byte[1024 * 8];
        while ((len=bfr.read(bytes))!=-1){
            bfw.write(bytes,0,len);
        }
        bfr.close();
        bfw.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值