IO流简单入门(一)

1. IO流概述

1.1 IO流的作用

IO流的作用:就是可以对文件或者网络中的数据进行读、写的操作。

  • 把数据从磁盘、网络中读取到程序中来,用到的是输入流。

  • 把程序中的数据写入磁盘、网络中,用到的是输出流。

1.2 IO流的体系:

IO流分为两大派系:

  • 字节流:字节流又分为字节输入流、字节输出流
  • 字符流:字符流由分为字符输入流、字符输出流

2.字节流简单入门

2.1 FileInputStream 字节输入流

import java.io.*;

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

        //1.创建文件字节输入流管道,与源文件接通
        InputStream is = new FileInputStream("文件路径");

        //2.开始读取文件的字节数据
        //public int read():每次读取一个字节返回,如果没有数据,则返回-1
        int b;
        while ((b = is.read()) != -1) {
            System.out.print((char) b);
        }

        //3.流使用完毕以后,必须关闭!释放系统资源!
        is.close();

    }
}

      读取多个字节

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

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

        //1.创建一个字节输入流对象代表字节输入流管道,与源文件接通
        InputStream is = new FileInputStream("文件路径");
        //2.开始读取文件中的字节数据,每次读取多个字节
        // public int read(byte b[]) throws IOException
        // 每次读取多个字节到字节数组中,返回读取的字节数量,读取完毕返回-1
        int len;
        byte[] buffer = new byte[5];
        while ((len = is.read(buffer)) != -1){
            System.out.println(new String(buffer,0,len));
        }

        //关闭连接
        is.close();
    }
}

2.2 FileOutputStream 字节输出流

import java.io.*;

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

        //1.创建一个字节输出流管道与目标文件接通
        //注意:默认是覆盖
        //FileOutputStream fos = new FileOutputStream("文件路径");

        // public FileOutputStream(String name,boolean append):append = true :代表追加
        FileOutputStream fos = new FileOutputStream("文件路径",true);


        //write 方法
        fos.write('W');
        fos.write('E');
        fos.write('R');

        //写多个字节
        String s = "写入多个字节~";
        fos.write(s.getBytes());

        //限制写十个字节
        fos.write(s.getBytes(),0,10);

        //写特殊符号
        fos.write("\n\r".getBytes());

        //关闭连接
        fos.close();

    }
}

2.3 字节流拷贝文件

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class CopyDemo {
    public static void main(String[] args) throws IOException {
        
        //一:创建字节输入流,读取数据
        FileInputStream fis = new FileInputStream("原图路径");

        //二:创建字节输出流,写入数据
        FileOutputStream fos = new FileOutputStream("拷贝图像路径",true);

        //三:指定一个字节缓冲数组,一次读取1024个字节
        byte[] buffer = new byte[1024];

        //四:一次读取了多少个字节
        int len;
        while ((len = fis.read(buffer)) != -1){
            fos.write(buffer,0,len);
        }

        fos.close();
        fis.close();
    }
}

2.5 资源释放问题

        IO流的使用是一定要指定释放资源代码的,有两种解决方案:

  • try{
        //有可能产生异常的代码
    }catch(异常类 e){
        //处理异常的代码
    }finally{
        //释放资源的代码
        //finally里面的代码有一个特点,不管异常是否发生,finally里面的代码都会执行。
    }
  • try(资源对象1; 资源对象2;){
        使用资源的代码
    }catch(异常类 e){
        处理异常的代码
    }    此方案会自动释放()中的资源

        我们会在字符流的代码中演示两种方法

3.字符流简单入门

3.1 FileReader 字符输入流

import java.io.FileReader;

public class FileReaderDemo {
    public static void main(String[] args) {

        try (
                //创建FileReader对象
                FileReader fr = new FileReader("文件路径");
        ) {
            char[] buffer = new char[1024];
            int len;
            while ((len = fr.read(buffer)) != -1) {
                String s = new String(buffer, 0, len);
                System.out.println(s);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3.2 FileWriter 字符输出流

import java.io.FileWriter;
import java.io.IOException;

public class FileWriterDemo {
    public static void main(String[] args) {
        FileWriter fw = null;
        try {
            //FileWriter也有续写开关
            fw = new FileWriter("文件路径");

            fw.write('一');
            fw.write('二');
            fw.write('三');

            fw.write("字符输出流");

            String s = "字符输出流开始写入";

            fw.write(s, 0, 5);

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fw != null) {
                try {
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

3.3 字符流拷贝文件

import java.io.FileReader;
import java.io.FileWriter;

public class CopyFile {
    public static void main(String[] args) {
        //通过字符流实现文件的拷贝
        try (
                FileReader fr = new FileReader("原文件路径");
                FileWriter fw = new FileWriter("拷贝文件路径");
        ) {
            char[] buffer = new char[1024];
            int len;
            while ((len = fr.read(buffer)) != -1) {
                fw.write(buffer, 0, len);

            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值