FileInputStream 和FileOutputStream的概述,看完秒懂,内布操作

底层的最原本的文件字节流的操作:InputStream outputStream

 1 .InputStream 和 OutputStream两个字节流都是抽象类,不能进行实例化操作,使用它的子类进行文件按的操作
 2. 

字节输出流:从内存中按字节流的形式写出到硬盘等存储介质上——FileInputStream

	1. 字节输出流和字符输出流是不一样的,字节输出流底层是没有自带的缓冲取得,
	2. 如果使用构造方法中中append参数,不指定默认位false那么每次写出的内容将会崔原来的内容进行全面的覆盖,原先的内容全部进行删除的操作,指定位true的话就是追加数据
	3. 由于是进行字节操作,所以底层是不会出现乱码的,写出的时候,文件将会按照我们的编译期的平台默认编码进行编码
	4. 同样,写出文件的时候会进行文件路径的判断,如果文件存在,则进行写入文件中,如果文件不存在,则会在该路径下新建一个文件,不用担心文件不存在的问题
	5. 另外一个容易出现的问题是,使用写出操作的时候,如果是字符串,不能使用字符串的长度进行学粗
	6. 字节流写出的两种形式,可以自定义写出,也可以使用字节数组进行接收写出,构造方法的来到都素hi继承自父类的方法,重写实现的  writer(int byte)--->要写出的指定字节个数。
	7. 由于每次使用的是字节来进行字节的获取,所以最中的输出,必须要转换成字符进行输出展现,所以String类的实现必须要进行字符串的转换   newString().getBytes();

代码:

public class InputStreamDemo1 {

    public static void main(String[] args) throws IOException {
        InputStreamReader isr = new InputStreamReader(new FileInputStream("D:\\a.txt"));

        //读取数据
        //转换流对象由文件字节输入流对象来进行构建
        //底层真正来读取数据的是文件字节输入流
        //先根据文件字节流来读取数据
        //在根据字符流来提示展示数据
        //转换流----字节流转换成字符流
        char[] cs = new char[10];
        int len=0;
        //展示数据---字符形式数据
        //展示的数据由提供字符流来获取
        while((len=isr.read(cs))!=-1){
            System.out.println(new String(cs,0,len));
        }
        //关闭流
        isr.close();
    }
}

字节输入流——从硬盘上的文件进行读取到内存中进行存储的操作——FileInputStream

	1. 字节输入的本质是从硬盘等存储介质中进行数据的读出,所以一定要保证文件的存在性,如果文件不存在,则会 FileNotFoundException异常,中断文件的执行,不能继续程序的执行
	2. 字节输入的读取方式主要有两种,直接读取或者自建缓冲区进行读取,读取的时候返回的是读取到的字节的个数,进行字节的个数的记录,其实字节的长度,最后通过字节转换成字符串的形式进行转换字节。
	3. 字节读取到末尾的结束标志同样是-1,-1作为文件的末尾的结束标记。

代码演示:

import java.io.FileInputStream;
import java.io.IOException;

public class FileInputStreamDemo1 {

    public static void main(String[] args) throws IOException {
        //创建文件字节输入流对象
        FileInputStream fis=new FileInputStream("D:\\a.txt");

      /*  //读取文件--->一个字符占三个字节的大小,最终的结尾是 -1进行结尾
        int read = fis.read();
        System.out.println(read);
        int read1 = fis.read();
        System.out.println(read1);
        int read2 = fis.read();
        System.out.println(read2);
        int read3 = fis.read();
        System.out.println(read3);*/

        //进行全部进行读取的操作
        //len表示的是字节的多少。每次读取的字节数目,
        // 底层通过字节进行编解码的改变,使用字节编码不会有乱码的
        //按字节读取,fileInputStream流
        int len=0;
        //自建缓冲区
        byte[] b=new byte[1024];  //自建长度的标志一般不好给
        while((len=fis.read(b))!=-1){
            //进行文件的读出
            System.out.println(new String(b,0,len));
        }
        //关流
        fis.close();
    }
}

实现文件的复制:

public class FileCopy {
    //实现文件的复制
    public static void main(String[] args) throws IOException {
        //创建文件字符输入流  读取的前提是文件是存在的,不存在则不能进行读取
        FileReader fr=new FileReader("D:\\a.txt");
        //创建文件字符输出流
        FileWriter fw=new FileWriter("D:\\b.txt");

        //实现一读一写的操作即可
        int len=0;
        //创建缓冲区
        char[] cs=new char[1024];
        //进行读写的判断
        while((len=fr.read(cs))!=-1){
            //读取的操作,开始进行写入
            fw.write(cs,0,len);
        }
        fw.flush();
        System.out.println("写入成功");
        //关闭流
        fw.close();
        fr.close();
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值