IO流笔记(上)

第一章File类

1.1 概述

java.io.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建,查找和删除等操作。

java把电脑中的文件和文件夹(目录)封装成了一个File类,我们可以使用File类对文件和文件夹进行操作

  • 创建,删除,获取,判断,遍历, 获取文件的大小

File类是一个与系统无关的类,任何的操作系统都可以使用这个类中方法

1.2 构造方法

  • public File (String pathname):通过将给定的路径名字符串转换为抽象路径名来创建新的File实例
  • public File (String parent,String child):从父路径名字符串和子路径名字符串创建新的File实例
  • public File (File parent,String child):从父抽象路径名和子路径名字符串创建新的File实例

在这里插入图片描述

1.3 File中的静态成员变量

[

String=" "+char 所以上面两组的结果都是一样的

1.4常用方法

获取功能的方法

  • public String getAbsolutePath():返回此File的绝对路径字符串
  • public String getPath():将此File转换为路径名字符串
  • public String getName():返回由此File表示的文件或目录的名称。
  • public long length():返回由此File表示的文件的长度

toString源码调用的就是getPath方法

判断功能的方法

  • public boolean exists():此File表示的文件或目录是否存在
  • public boolean isDirectory():此File表示是否为目录
  • public boolean isFile():此File表示是否是文件

创建删除功能的方法

  • public boolean creatNewFile():当且仅当具有该名称文件不存在时,创建一个此名称的新文件
  • public boolean delete():删除由此File表示的文件或目录
  • public boolean mkdir():创建由此File表示的目录
  • public boolean mkdirs():创建由此File表示的目录,包括任何需要但不存在的父目录

1.5 目录的遍历

  • public String[] list ():返回一个String类型数组,表示该File目录中的所有文件或目录
  • public File[] listFiles():返回一个File数组,表示该File目录中的所有子文件或目录

注意:

1. list方法和listFile方法遍历的是构造方法中给出的目录

2. 如果构造方法中给出的目录不存在,则会抛出空指针异常
3. 如果构造方法中给出的路径不是一个目录,也会抛出空指针异常

在File类中也有两个重写listFiles方法的接口,参数是(FileFilter filter)和(FileName filter)用来过滤文件

注意:

​ 两个过滤接口没有实现类,需要自己写实现类,重写过滤方法accept,在方法中自己定义过滤的规则

第二章IO流

JAVA中I/O操作主要是指使用java.io包下的内容,进行输入输出操作。输入也叫做读取数据,输出也叫做写出数据

1.1 IO的分类

根据数据的流向分为:输入流和输出流

  • 输入流 :把数据从其他设备上读取到内存中的流
  • 输入流 : 把数据从内存中写出到其他设备中的流

根据数据的类型分为:字节流字符流

1.2 IO流的顶级父类

在这里插入图片描述

第三章 字节流

3.1 一切皆为字节

一切文件数据(文本,图片,视频等)在存储时,都是以二进制数字形式保存,都一个个的字节,那么传输时一样如此。所以,字节流可以传输任意文件数据。在操作流的时候,我们要时刻明确,无论使用什么样的流对象,底层传输的始终是二进制数据

3.2 字节输出流【OutputStream】

java.io.OutputStream抽象类是表示字节输出流的所有类的父类,将指定的字节信息写出到目的地。它定义了字节输出流的基本共性方法

  • public void close():关闭此输出流并释放与此流相关联的任何系统资源
  • public void flush():刷新此输出流并强制任何缓冲的输出字节被写出
  • public void write(byte[]b) :将b.length字节从指定的字节数组写入此输出流
  • public void write (byte[]b,int off,int len):从指定的字节数组写入len字节,从偏移量off开始输出到此输出流
  • public abstract void write(int b):将指定的字节输出流

3.3 FileOutputStream类

FileOutputStream类是文件输出流,用于将数据写出到文件

构造方法

  • public FileOutputStream(File file) :创建文件输出流以写入由指定的File对象表示文件
  • public FileOutputStream(String name) : 创建一个向具有指定名称的文件中写入数据的输出文件流

写出字节数据

在这里插入图片描述

数据追加续写

  • public FileOutputStream(File file,boolean append):创建文件输出流以写入由指定的File对象表示的文件。
  • public FileOutputStream(String name,boolean append):创建文件输出流以指定的名称写入文件

输入流的换行符号:

windows:\r\n

Linux: /n

mac: /r

3.4 字节输入流【InputStream】

InputStream抽象类是表示字节输入流的所有类的父类,可以读取字节信息到内存中。他定义了字节输入流的基本共性功能方法。

  • public void close( ): 关闭此输入流并释放与此流相关联的任何系统资源
  • public int read( ):从输入流读取数据的下一个字节
  • public int read (byte[]b):从输入流中读取一些字节数,并将他们存储到字节数组b中

3.5 FileInputStream类

是文件输入流,从文件中读取字节

构造方法

  • FileInputStream(File file):通过打开与实际文件的连接来创建一个FileInputStream,该文件由文件系统中的File对象file命名
  • FileInputStream(String name):通过打开与实际文件的连接来创建一个FileInputStream,该文件由文件系统中的路径名name命名

读取字节数据

在这里插入图片描述

1.读取字节read方法,每次可以读取一个字节的数据,提升为int类型,读取到文件末尾,返回-1

明确两件事情:

​ 1.方法参数byte[]的作用

​ 起到缓冲的作用,指定读取多少个字节,然后一次性读取

​ 数组的长度一般定义为1024(1kb)或者是1024的整数倍

​ 2.方法的返回值int是

​ 每次读取的有效字节个数

3.6 文件复制

package com.IO;

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

/**
 *文件复制:一读一写
 */
public class CopyFile {
    public static void main(String[] args) throws IOException {
        //创建文件输入流对象
        FileInputStream fis = new FileInputStream("e:\\b.txt");
        //创建文件输出流对象
        FileOutputStream fos = new FileOutputStream("d:\\b.txt");

        //用一个byte数组来做缓冲区  定义一次性读取/写入多少字节
        byte[] bytes = new byte[1024];
        //定义一个int类型变量接收读取到的位置,来判断是否读取到了最后一位
        int len = 0;
        while ((len = fis.read(bytes))!=-1){
            fos.write(bytes);
        }
        //关闭流
        fos.close();
        fis.close();
    }

}

第四章 字符流

当使用字节流读取文本时,可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储。所以java提供了一些字符流,以字符为单位读写数据,专门用于处理文本文件

4.1 字符输入流【Reader】

Reader抽象类时表示用于读取字符流的所有类的父类,可以读取字符信息到内存中。它定义了字符输入流的基本共性功能方法

  • public void close( ):关闭此流并释放与此流相关联的系统资源
  • public int read( ):从输入流读取一个字符
  • public int read(char[] cbuf):从输入流中读取一些字符,并把它们存储到字符数组cbuf中

4.2 FileReader类

FileReader类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区

构造方法

  • public FileReader(File file) :创建一个新的FileReader,给定要读取的File对象
  • public FileReader(String name) :创建一个新的FileReader,给定要读取的文件名称

读取字符

方法和字节输入流一样

4.3 字符输入流【Writer】

Writer抽象类是表示用于写出字符流的所有类的父类,将指定的字符信息写出到目的地。它定义了字节输出流的基本共性功能方法

  • public void write(int c):写入单个字符
  • public void write(char[] cbuf):写入字符数组
  • public abstract void write(char[] cbuf, int off, int len): 写入字符数组的某一部分
  • public void write(String str):写入字符串
  • public void write(String str,int off,int len):写入字符串的某一部分
  • public void flush:刷新该流的缓冲
  • public void close:关闭流,但是要先刷新

4.4 FileWriter类

FileWriter类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认的字节缓冲区

构造方法

与FileReader相反

基本写出数据

在这里插入图片描述

关闭和刷新

因为内存缓冲区的原因,如果不关闭输出流,无法写出字符到文件中。但是关闭的流对象,是无法继续写出数据的。如果即想写出数据,又不想关闭流,就需要flush方法了

写出其他数据

1.写出字符数组:write(char[] cbuf)write(char[] cbuf,int off,int len),每次可以写出字符数组中的数据

2.写出字符串:public void write(String str)public void write(String str,int off,int len),每次可以写出字符串中的数据

3.续写和换行:操作类似于FileOutputStream

第五章 属性集

5.1 概述

java.util.Properties继承于Hashtable,来表示一个持久的属性集。它使用键值结构存储数据,每个键及其对应值都是一个字符串。该类也被许多java类使用,比如获取系统属性时,System.getProperties方法就是返回一个Properties对象

5.2 Properties类

构造方法

  • public Properties( ):创建一个空的属性列表

基本存储方法

在这里插入图片描述

  • public Object setProperties(String key,String value):保存一对属性
  • public String getProperties(String key):通过key找到value
  • public Set<String> stringPropertiesName( ):所有键的名称的集合(保存key值的集合)

使用步骤:

  1. 创建一个Properties对象
  2. 调用其中的set方法将数据存入到对象中
  3. 创建一个输入/输出流(字节流不能加载中文,字符流可以)
  4. 调用load/store方法,将数据从对象中写出/存入
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值