IO流——FileInputStream和OutputStream

本次博客带领大家学习IO流中的常用类:FileInputStream和OutputStream。

FileInputStream

  1. 文件字节输入流,万能的,任何类型的文件都可以采用这个方法。
  2. 字节的方式,完成输入的操作,完成读的操作(硬盘 ——> 内存)。
    请添加图片描述
  • 方法一:使用循环readData接收文件.read()中的数据。
@Test
public void readFile01(){
    String filePath = "d:\\111\\hello.txt";
    int readData = 0;
    FileInputStream fileInputStream = null;
    try {
        //创建 FileInputStream对象  ,用于读取 文件
        fileInputStream = new FileInputStream(filePath);
        //从该输入流读取一个字节的数据。如果没有输入可用,此方法将阻止。。
        //如果返回-1,表示读取完毕。
        while ((readData = fileInputStream.read())!= -1){
            System.out.print((char)readData);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        try {
            fileInputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  • 方法二:使用循环buf数组接收read中的数据,注意buf数组的大小。
@Test
public void readFile02(){
    String filePath = "d:\\111\\hello.txt";
    //字节数组
    byte[] buf = new byte[30]; //一次读取30个字节。
    int readLen = 0;
    FileInputStream fileInputStream = null;
    try {
        //创建 FileInputStream对象  ,用于读取 文件
        fileInputStream = new FileInputStream(filePath);
        //从该输入流读取最多b.length字节的数据到字节数组。如果没有输入可用,此方法将阻止。。
        //如果返回-1,表示读取完毕。
        //如果读取正常,返回实际读取的字节数
        while ((readLen = fileInputStream.read(buf))!= -1){
            System.out.print(new String(buf, 0,readLen));
        }
    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        try {
            fileInputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

OutputStream

  • 字节的方式,完成输出的操作,完成写的操作(内存 ——> 硬盘)。
    请添加图片描述
  • 当需要写入一个字节到文件里面的话,使用fileOutputStream.write(‘L’);
  • 当需要写入一个字符串到文件里面的话,使用fileOutputStream.write(str.getBytes());
  • 当需要写入一个字符串并按规定的长度到文件里面的话,使用fileOutputStream.write(str.getBytes(),0,3);
@Test
public void writeFile(){

    //创建 FileOutputStream 对象
    String filePath = "d:\\111\\a.txt";
    FileOutputStream fileOutputStream = null;

    try {
        //得到 FileOutputStream 对象
        fileOutputStream = new FileOutputStream(filePath);
        //写入一个字节
        //fileOutputStream.write('L');
        //写入字符串
        String str = "hello,world";
        //str.getBytes() 可以把 字符串->字节数组
        //fileOutputStream.write(str.getBytes());
        /*
        write(byte[] b,int off,int len)将 len字节从位于偏移量 off的指定字节数组写入此文件输入流。
         */
        fileOutputStream.write(str.getBytes(),0,3);
    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        try {
            fileOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  • 注意事项:
    • new FileOutputStream(filePath) 创建方式,当写入内容时,会覆盖原来的内容。
    • new FileOutputStream(filePath,true) 创建方式,当写入内容时,是追加到文件后面。

综合案例:拷贝文件

  • 完成 文件拷贝,将 d:\111\boluo.jpg 拷贝到 d:\boluo.jpg。
public static void main(String[] args) {
    // 完成 文件拷贝,将 d:\\111\\boluo.jpg 拷贝到 d:\\
    //思路分析
    //1.创建文件的输入流,将文件读入到程序
    //2.创建文件的输出流,将读取到的文件数据,写入到指定的文件
    String srcFilePath = "d:\\111\\boluo.jpg";
    String destFilePath = "d:\\boluo.jpg";
    FileInputStream fileInputStream = null;
    FileOutputStream fileOutputStream = null;

    try {
        fileInputStream = new FileInputStream(srcFilePath);
        fileOutputStream = new FileOutputStream(destFilePath);

        //定义一个字节数组,提高读取效果。
        byte[] buf = new byte[1024];
        int readLen = 0;
        while ((readLen= fileInputStream.read(buf))!= -1){
            //读取到后,就写入到文件,通过 fileOutputStream
            fileOutputStream.write(buf,0,readLen);
        }
        System.out.println("拷贝完成!");
    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        if (fileInputStream != null){
            try {
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (fileOutputStream != null){
            try {
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
 try {
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
InputStream和OutputStreamJava IO库中的两个重要类。它们用于处理字节流的输入和输出操作。 InputStream是一个抽象类,它是所有字节输入流的父类。它提供了一系列方法来读取字节数据。例如,可以使用FileInputStream类来创建一个输入流对象,然后使用read()方法逐个字节地读取文件中的数据。\[1\]\[3\] OutputStream也是一个抽象类,它是所有字节输出流的父类。它提供了一系列方法来写入字节数据。例如,可以使用FileOutputStream类来创建一个输出流对象,然后使用write()方法将字节数据写入文件中。\[1\]\[2\] 这两个类可以用于文件的读取和写入操作。例如,可以使用FileInputStream读取一个文件的字节数据,然后使用FileOutputStream将读取到的字节数据写入另一个文件中,实现文件的复制功能。\[2\] 需要注意的是,在使用这两个类进行文件操作时,需要在操作完成后及时关闭流,以释放资源。可以使用try-finally或try-with-resources语句来确保流的关闭。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [java基础io流——OutputStream和InputStream的故事(温故知新)](https://blog.csdn.net/weixin_36586120/article/details/80486112)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [InputStream和OutputStream](https://blog.csdn.net/sspudding/article/details/88673551)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值