JAVA学习笔记14:IO流01

IO流01

  • 文件

    文件流

    文件再程序中是以流的形式来操作的
    流:数据再数据源(文件)和程序(内存)之间经理的路径

    常用的文件操作

    创建文件对象
    new File(String pathname) //根据路径构建一个File对象
    new File(File parent, String child) //根据父目录文件+子路径构建
    new File(String parent, String child) //根据父目录+子路径构建
    之后通过createNewFile()创建新文件
    获取文件信息

    方法作用
    getName获取文件名
    getAbsolutePath获取绝对路径
    getParent获取父目录
    length文件大小(字节)
    exists判断是否存在
    isFIle判断是不是文件
    isDirectory判断是不是目录

    目录操作和文件删除
    mkdir创建一级目录
    mkdirs创建多级目录
    delete删除空目录或文件

    IO流原理及流的分类

    按操作数据单位不同分为:字节流(8 bit)和字符流(按字符)
    按数据流的流向不同分为:输入流和输出流
    按流的角色不同分为:节点流,处理流/包装流

    抽象基类字节流字符流
    输入流InputStreamReader
    输出流OutputStreamWriter

    InputStream常用子类

    FileInputStream:文件输入流
    构造器:可以通过一个File对象,或者一个文件描述符,或者文件的完整路径进行构造

    public void readFile(){
        String filePath = "d:\\hello.txt";
        int data;
        FileInputStream file = null;
        try {
            file = new FileInputStream(filePath);
            //read方法从输入流读取一个字节的数据,输入结束返回-1
            while((data = file.read()) != -1){
                System.out.print((char)data);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        finally {
            //关闭文件流,释放资源
            try {
                file.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
    

    普通的read方法效率较低,可使用read(byte[] b)方法,该方法一次读取最多b.length个字节,如果读取正常,返回实际读取的字节数
    BufferedInputStream:缓冲字节输入流

    ObjectInputStream:对象字节输入流

    OutputStream常用子类

    FileOutputStream
    构造方法同FileInputStream

    public void writeFile(){
        FileOutputStream file = null;
        String filePath = "d:\\a.txt";
    
        try {
            //如此创建,覆盖原先内容
            //file = new FileOutputStream(filePath);如此创建则为追加
            file = new FileOutputStream(filePath);
            //写入单个字节
            file.write('H');
            String str = "HiHiHi";
            //getBytes将字符串转为字节数组,从1开始,写3个
            file.write(str.getBytes(), 1, 3);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                file.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
    

    FileReader

    字符流
    构造使用文件对象或文件路径字符串
    read()读取单个字符,末尾返回-1
    read(char[])批量读取多个字符

    public static void main(String[] args) {
        String filePath = "d:\\a.txt";
        FileReader fileReader = null;
        int data;
        try {
            fileReader = new FileReader(filePath);
            while((data = fileReader.read()) != -1){
                System.out.print((char)data);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if(fileReader != null){
                try {
                    fileReader.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
    

    FIleWriter

    构造使用文件对象或文件路径字符串,追加模式第二个参数为true
    write方法可以是单个字符,字符数组或字符串
    FileWriter使用后,必须要关闭(close)或刷新(flush),否则无法完成写入

    public static void main(String[] args) {
        FileWriter file = null;
        String filePath = "d:\\a.txt";
    
        try {
            file = new FileWriter(filePath);
            file.write("嗨嗨嗨!写进来咯!");
            file.write('H');
            file.write(chars);
            file.write("又进来咯!".toCharArray(), 0, 3);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                file.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值