总结之java中File类和IO流(二)——IO文件字节流介绍与使用

FileOutputStream

FileOutputStream 文件输出流,作用:把内存中的数据写入到硬盘的文件中.
写入数据的原理(内存–>硬盘)
java程序 -->JVM虚拟机–>os(操作系统)–>os调用写数据的方法 --> 把数据写入到文件中
构造方法:

  • FileOutputStream(String name) 创建一个向具有指定名称的文件中写入数据的输出文件流。

  • FileOutputStream(File file)创建一个向指定File对象表示中写入数据的文件输出流。
    参数:写入数据的目的地
    String name:目的地是一个文件的路径
    File file:目的地是一个文件
    构造方法的作用:
    1.创建一个FileOutputStream对象
    2.会根据构造方法中传递的文件/文件路径,创建一个空的文件
    3.会把FileOutputStream对象指向创建好的文件
    字节输出流的使用步骤
    1.创建一FileOutputStream对象,构造方法中传递写入数据的目的地
    2.调用FileOutputStream对象中的方法write,把数据写入到文件中
    3.释放资源(流使用会占用一定的内存,使用完毕要把内存清空,提供程序的效率)

		//1.创建一FileOutputStream对象,构造方法中传递写入数据的目的地
        FileOutputStream fileOutputStream = new FileOutputStream("D://upload/a.txt");
        //2.调用FileOutputStream对象中的方法write,把数据写入到文件中
        fileOutputStream.write(323332221);//因为是字节流把十进制整数转二进制整数,输出时系统会自动把字节转字符的是{
        //3.释放资源(流使用会占用一定的内存,使用完毕要把内存清空,提供程序的效率)
        fileOutputStream.close();

一次写多个字节的方法

 		FileOutputStream fileOutputStream2 = new FileOutputStream("D://upload/b.txt");

        //write(byte[] b)
        //如果写的第一个字节是正数(0-127),那么显示的时候查询ASCII表
        //如果写的第一个字节是负数,他和第二个字节组成一个中文.查询的是系统的面容码表gbk
        byte[] bytes = {65, 66, 67};//表示ABC
        fileOutputStream2.write(bytes);//因为是字节流把十进制整数转二进制整数,输出时系统会自动把字节转字符的是{

        //String中 byte[] getBytes()方法可以把字符串转成字节数组
        fileOutputStream2.write(",什么妖魔鬼怪".getBytes());//gbk一个中文两个字节,utf-8 一个中文三个字节
        fileOutputStream2.close();

追加写,两个参数的构造方法

  • FileOutputStream(String name,boolean append)
    创建一个向具有指定name的文件中写入数据的输出文件流

  • FileOutputStream(File file,boolean append)
    创建一个向指定File对象表示的文件中写入数据的文件输出流
    参数
    String name,File file :写入数据的目的地
    boolean append:追加开关
    true:创建对象不会覆盖源文件,继续在文件的末尾追加写数据
    false:创建一个新文件,覆盖源文件
    写换行:写换行符 windows:\r\n linux:/n mac:/r

		FileOutputStream fileOutputStream3 = new FileOutputStream("D://upload/b.txt", true);
        fileOutputStream3.write("\r\n".getBytes());
        fileOutputStream3.write("追加的数据".getBytes());
        fileOutputStream3.close();

FileInputStream

FileInputStream:文件字节输入 作用:把硬盘文件中的数据,读取到内存中使用
读取数据的原理(硬盘–>内存)
java程序–>JVM–>OS–>OS读取数据的方法–>读取文件
构造方法:

  • FileInputStream(String name)
  • FileInputStream(File file)

参数:读取文件的数据源
String name:文件的路径,File file:文件
字节输入流的使用步骤
1.创建FileInputStream对象,构造方法中绑定要读取的数据源
2.使用FileInoutStream对象中的方法read,读取文件
3.释放资源
注意:如果文件是utf-8的中文 会乱码

		//1.创建FileInputStream对象,构造方法中绑定要读取的数据源
        FileInputStream fileInputStream = new FileInputStream("D://upload/b.txt");
        //2.使用FileInoutStream对象中的方法read,读取文件
        //int read()读取文件中的一个字节并返回,读取到文件定位末尾返回-1
        int len =fileInputStream.read();
        System.out.println(len);
        int len2 =fileInputStream.read();
        System.out.println(len2);
         //3.释放资源
        fileInputStream.close();

通过while循环读取全部字节

        int len3 = 0;//记录读取到的字节
        while((len3 = fileInputStream.read())!=-1){
           System.out.println(len3);
        }

再优化:int read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中
可以每次读多个一般设为1024(1k)
补充:String构造方法
String(byte[] b)把字节数组转换为字符串
String(byte[] b, int offset, int lenth)把字节数组的一部分转换为字符串, offset:数组的开始索引,length:转换的字节长度.

 		byte[] bytes1 =new byte[2];
        int len4=fileInputStream.read(bytes1);
        System.out.println(len4);//2
        System.out.println(Arrays.toString(bytes1));//[65,66]
        System.out.println(new String(bytes1));//AB

字节数组方式:通过while循环读取全部字节

byte[] bytes2= new byte[1024];//储存读取到的多个字节
        int len5 = 0;//记录每次读取到的有效字节个数
        while((len5 = fileInputStream.read(bytes2))!=-1){
            System.out.println(new String(bytes2,0,len5));
        }

通过输入输出完成文件复制

//文件复制D://upload/0d552d5a53bf49d68983fb82b9879009.jpg-->D://upload/b.jpg
        FileInputStream fileInputStream5 =new FileInputStream("D://upload/0d552d5a53bf49d68983fb82b9879009.jpg");

        FileOutputStream fileOutputStream5 =new FileOutputStream("D://upload/b.jpg");
//        int len6 = 0;//记录读取到的字节
        while((len6 = fileInputStream5.read())!=-1){
            fileOutputStream5.write(len6);
        }
        //字节数组缓存 使复制效率提高
        byte[] bytes7= new byte[1024];//储存读取到的多个字节
        int len7 = 0;//记录每次读取到的有效字节个数
        while((len7 = fileInputStream5.read(bytes7))!=-1){
            fileOutputStream5.write(bytes7,0,len7);
        }

		//先关闭输出,再关闭输入,
        fileOutputStream5.close();
        fileInputStream5.close();

    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值