Java-IO流

 bit---比特,Byte----表示字节.

 

字节 (byte):8个二进制位(bit)为一个字节(B),最常用的单位。

 8bit(位/比特) =1 Byte(字节)
1024 字节=  1KB
1024KB   = 1MB

一般 utf-8 编码下,一个汉字 字符 占用 3 个 字节.

Java中的一个char是2个字节。Java采用unicode,2个字节来表示一个字符,这点与C语言中不同。

1、Java IO的类型

Java IO可以分为:

       1)输入流:InputStream和Reader

       2)输出流:OutputStream和Writer


而从其处理流的类型的维度上看,Java IO又可以分为:

       1)字节流:InputStream和OutputStream

       2)字符流:Reader和Writer

        字节流                 对应子类字符流                对应子类

输入流 

 InputStream

(字节输入--

抽象类--

元祖)

  • File InputStream (访问文件)
    
  • Buffered InputStream (缓冲流)
    
  • Object InputStream (对象流)
    

 Reader

(字符输入---抽象类--

元祖)

  • File Reader (访问文件)
  • Buffered Reader (缓冲流)
  • InputStream Reader (对象流)

输出流 

    OutputStream

(字节输出--

抽象类--

元祖)

  •  File  OutputStream (访问文件)
  •  Buffered  OutputStream (缓冲流)
  •  Object  OutpiutStream (对象流)

 Writer

(字符输入---抽象类--

元祖)

  • File Writer
  • Bufferde Writer
  • OutputStream Writer
  • String Writer (访问字符串)

 FlileinputStream   ---  文件 字节输入流   read()  方法 如果返回 -1 表示读取完毕

 /*
        FileInputStream构造方法有三种
        1可以传递字符串地址,
        2也可以是File类型对象
        3参数 FileDescriptor
         */

        FileInputStream fileinputStream = new FileInputStream("e:/hello.txt");
        byte[] buff = new byte[1024];//缓冲区
        int max;//接受返回值,read(byte )方法返回 缓冲区中 最大字节数字
        while ((max = fileinputStream.read(buff)) > 0)
        {
            //String 转换byte类型
            System.out.println(new String(buff,0,max));

        }
        fileinputStream.close();//最后关闭


    }

FileOutputStream --- 文件 字节输出流

 /*
        //实例化一个文件的字节输出流,输出写数据时,指定的文件不存在,会自动创建后,再写入
        注意此方法会覆盖原有的数据,如果想追加数据,需要在FileOutputStream(String name , true)第二个参数加上true
         */
        FileOutputStream fout = new FileOutputStream("E:/hello.txt",true);

        String name = "要写入的数据。。。";
        byte[] bt = name.getBytes();//getBytes 将字符串转换成bytes数组

        fout.write(bt);
        fout.close();

 FlileinputStream   ---  文件 字节输入流    +    FileOutputStream --- 文件 字节输出流

复制文件(包括图片,视频,音频等。。。二进制文件)

        //字节输入流
        FileInputStream ins = new FileInputStream("e:/图片1.jpg");
        //字节输出流
        FileOutputStream ops = new FileOutputStream("e:/图片2.jpg");

        byte[] buff = new byte[8];
        int max;
        while ((max = ins.read(buff)) != -1)
        {
            ops.write(buff,0,max);

        }
        System.out.println("复制完毕...");
        ins.close();
        ops.close();

FileReader  文件 字符输入流           read()  方法 如果返回 -1 表示读取完毕

FileReader fileReader = new FileReader("e:/hello.txt");

        char[] buff = new char[8];
        int read;

        while ((read = fileReader.read(buff)) != -1)
        {
            System.out.println(new String(buff,0,read));
        }

        fileReader.close();

 FileWriter  文件 字符输出流 (在这里省略了

字符 输入输出联动(文件复制拷贝粘贴)

        FileReader fileReader = new FileReader("e:/hello.txt");
        FileWriter fileWriter = new FileWriter("e:/hello2.txt",true);
        char[] cuff = new char[8];
        int ok;
        while ((ok = fileReader.read(cuff)) != -1)
        {
            fileWriter.write(cuff,0,ok);
        }
        fileWriter.close();
        fileWriter.close();


  

 BufferedReader  处理流(字符输入流)   

read()  方法如果返回  -1  表示 读取完毕

readLine() 方法 如果返回 null   表示读取完毕

 BufferedReader bufferedReader = new BufferedReader(new FileReader("e:/hello.txt"));

        String name;
        while (( name = bufferedReader.readLine()) != null)
        {
            System.out.println(name);
        }

 BufferedWriter  处理流 (字符输出流)

   BufferedWriter buw = new BufferedWriter(new FileWriter("e:/hello.txt"));
        
        buw.write("写入的内容。。。");
        buw.newLine();//  系统换行
        buw.write("写入的内容。。。");
        
        buw.close();

 BufferedReader  处理流(字符输出流) +  BufferedWriter  处理流 (字符输入流)

 复制文件  (字符流只能复制纯文本,不能复制二进制文件)

        BufferedReader bufR = new BufferedReader(new FileReader("e:/hello.txt"));

        BufferedWriter buW = new BufferedWriter(new FileWriter("e:/hello3.txt"));

        char[] buf = new char[8];
        int max;
        while ((max = bufR.read(buf)) != -1)
        {
            buW.write(buf,0,max);
        }
        buf.clone();
        buW.close();
        System.out.println("复制拷贝完毕。。。");
    

转换流     InputStreamReader(字符输入流)   

字节 输入流  FileInputStream  转换成

字符 输入流  BufferedReader

-----将字节流转换成字符流,可设置编码

        //使用转换流InputStreamReader
        // 将字节流 FileInputStream 转换成字符流BufferedReader
        //设置字符编码  比如 gbk,utf-8,
        InputStreamReader insr = new InputStreamReader(new FileInputStream("e:/hello.txt"),"utf-8");
        BufferedReader bfr = new BufferedReader(insr);

        char[] buff = new char[1024];
        int max;
        while ((max = bfr.read(buff)) != -1)
        {
            System.out.println(new String(buff,0,max));
        }
        System.out.println("utf-8 编码 正常");
        bfr.close();

转换流     OutputStreamWriter(字符输出流)   

字节 输出流  FileOutputStream   转换成

字符 输出流  OutputStreamWriter

        //使用OutputStreamWriter
        //将FileOutputStream 字节流  转换成   字符流 OutputStreamWriter
        OutputStreamWriter ops = new OutputStreamWriter(new FileOutputStream("e:/hello5.txt"),"utf-8");

        ops.write("hello 中文 ");

        ops.close();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一剑封喉の

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值