IO输入输出流,输入流和输出流的基本用法

 

一、IO流简介:

流的定义:流是指一连串流动的字符,是以先进先出方式发送信息的通道。

按流向分:输出流:OutputStream和Writer为基类

                输入流:InputStream和Reader为基类

按处理数据单元划分:字节流:字节输入流:InputStream基类

                                                字节输出流:OutputStream基类

                                  字符流:字符输入流:Reader基类

                                   字节输出流:Writer基类

(字节流是 8 位通用字节流,字符流是16位Unicode字符流)

1.1 InputStream

引入相关的类:InputStream ins =null;

构建输入流,例如FileInputStream:

ins =new FileInputStream(new File(path));

操控字节输入流的,所用的方法也是针对字节的。

常用方法:

返回值类型  

方法名

方法简介

abstract intread( )从此输入流中读取下一个字节(此方法是抽象方法,子类必须实现该方法。
intread(byte [ ] b )从输入流中读取一定数量的字节,存储在参数指定的字节数组中。
intread(byte [ ] b ,int off ,int len )读到 len字节从输入流读入字节数组数据。
longskip( long n )跳过并丢弃 n字节从输入流中的数据。
intavailable( )返回此输入流下一个方法可以读取的字节数。
package ChangYL.FileTest.InPutTest;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

public class InPutTest02 {

    public static void main(String[] args) throws Exception {

        // 缓冲区

        File f1 = new File("d:/d.txt");
        InputStream in = new FileInputStream(f1);

//        byte[] b=new byte[10];
//        //一次最多读取数组长度个字节,读取的内容转换成对应数字存入byte 数组中,
//        // 返回的是实际读取的字节数
//        int n = in.read(b);
//        System. out . println("读取的字节数: "+n);
//        String s=new String(b,0,n);
//        System. out. println(s);
//        byte[] b1=new byte[10];
//        //只剩5 个字节,实际读取了5个字节 数组后五个是默认值(无效数据)
//        int n1 = in.read(b1);
//        System. out . println("读取的字节数: "+n1);
//        // 对数组中从0索引开始截取读取到的有效字符数个内容 组成字符串
//        String s1=new String(b1,0,n1);
//        System. out . println(s1);

        // 推荐写法
        byte[] b2=new byte[10];
        int n;
        while ( (n=in.read(b2)) !=-1 ){
            String z = new String(b2 ,0,n);
            System.out.print(z);
        }

    }
}

1.2 OutputStream

常用方法:

返回值类型

方法名

方法简介

voidflush( )刷新输出流,是缓存数据被写出来
voidwrite(byte [ ] b)写b.length 字节从指定的字节数组的输出流
voidwrite(byte [ ] b, int off, int len)写len字节从字节数组数据中到输入流
abstract intwrite( int b )将指定的字节写入该输出流中

1.2.1  FileOutputStream

是OutputSTream的子类,主要功能是从源文件写入资料至指定文件中

构造方法

1、FileOutputStream( File file )// 创建“File对象”对应的“文件输入流”;默认“追加模式”是false,即“写到输出的流内容”不是以追加的方式添加到文件中。若要追加则为(File file, true);

2、FileOutputStream( String path ) // 创建“文件(路径为path)”对应的“文件输入流”; (若没有,自动系统调用方法创建),默认“追加模式”是false,即“写到输出的流内容”不是以追加的方式添加到文件中。  若要追加则为(String path, true); 

综合案例完成文件的复制

package ChangYL.FileTest.InPutTest;

import java.io.*;

public class CopyFileTest03 {
    public static void main(String[] args) throws IOException {

        // 1.定义源文件和目标文件的File对象
        File f1 = new File("D:/a.jpg");
        File newFile = new File("D:/aa/newFile.jpg");

        // 2.定义输入输出流关联文件
        InputStream in = new FileInputStream(f1);
        OutputStream out = new FileOutputStream(newFile);

        // 3.使用输入流读取内容,然后把读取的内容写入目标文件

//        // 3.(方法1)逐个进行读写操作
//            int n;
//            while ( (n = in.read() ) !=-1 ){
//                out.write(n);
//            }
//
//        // 3.(方法2)使用缓冲区读写
//            byte[] buffer = new byte[10];
//            while ( (n = in.read(buffer)) !=-1  ){
//                out.write(buffer,0,n);
//            }

        // 3.(方法3)
            long start = System.currentTimeMillis();
            // 推荐写法
            byte[] buffer = new byte[1024];
            int n ;
            while ( (n = in.read(buffer)) !=-1  ){
                out.write(buffer,0,n);
            }
            long stop = System.currentTimeMillis();

            System.out.println("耗时:"+(stop-start));


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值