File与IO流基类

在变量、数组、对象和集合中存储的数据是暂时存在的,一旦程序结束它们就会丢失.

为了能够永久地保存这些数据,需要将其保存到磁盘文件中。Java 的 I/O流技术可以将数据保存到文本文件和二进制文件中,以达到永久保存数据的要求。

 接着,java.io.File 类是专门对文件进行操作的类.其中,File 类不能访问文件内容本身,如果需要访问文件内容本身,也需要使用IO流.

一、File类

1.1file提供了三种构造方法

File(File parent, String child) //从父类的抽象路径名和子路径名字符串,创建新的File实例。 
File(String pathname) //路径名创建,可以是绝对路径,也可以是相对路径
File(String parent, String child) //从父类路径名字符串和子路径名字符串创建新的File实例。  

1.2file常见方法

1.判断文件或者目录是否存在

 

2.判断是否为目录,或者是文件

 

 3.创建空文件;返回true表示创建成功;false表示 创建失败: 文件已存在.

 

 4.创建文件夹

 

 这二者的区别是:mkdir()表示如果上级目录存在, 只创建本级目录;mkdirs() 表示如果上级目录不存在,创建所有的上级目录, 再创建本级目录.

 5.得到文件下的直接子目录和文件

 

 二、IO流基类

IO流分成三大类:
1.按照流的方向主要分为输入流和输出流两大类。 2.数据流按照数据单位的不同分为字节流和字符流。 3.按照功能可以划分为节点流和处理流。

IO流基类介绍

分类字节输出流字节输入流字符输出流字符输入流
抽象基类 OutputStream InputStream Writer Reader
访问文件 FileOutputStream FileInputStream FileWriter FileReader
访问数组 ByteArrayOutputStream ByteArrayInputStream CharArrayWriter CharArrayReader
访问管道 PipedOutputStream PipedInputStream PipedWriter PipedReader
访问字符串     StringWriter StringReader
缓冲流 BufferedOutputStream BufferedInputStream BufferedWriter BufferedReader
转换流     OutputStreamWriter InputStreamReader
对象流 ObjectOutputStream ObjectInputStream    
抽象基类 FilterOutputStream FilterInputStream FilterWriter FilterReader
打印流 PrintStream   PrintWriter  
推回输入流   PushbackInputStream   PushbackReader
特殊流 DataOutputStream DataInputStream    

其中,所有的输入流类都是 InputStream 抽象类(字节输入流)和 Reader 抽象类(字符输入流)的子类.同理,所有输出流类都是 OutputStream 抽象类(字节输出流)和 Writer 抽象类(字符输出流)的子类.

(1)InputStream字节输入流

InputStream 类常用方法
名称作用
int read() 从输入流读入一个 8 字节的数据,将它转换成一个 0~ 255 的整数,返回一个整数,如果遇到输入流的结尾返回 -1
int read(byte[] b) 从输入流读取若干字节的数据保存到参数 b 指定的字节数组中,返回的字节数表示读取的字节数,如果遇到输入流的结尾返回 -1
int read(byte[] b,int off,int len) 从输入流读取若干字节的数据保存到参数 b 指定的字节数组中,其中 off 是指在数组中开始保存数据位置的起始下标,len 是指读取字节的位数。返回的是实际读取的字节数,如果遇到输入流的结尾则返回 -1
void close() 关闭数据流,当完成对数据流的操作之后需要关闭数据流

(2)OutputStream字节输出流

OutputStream类的常用方法
名称作用
int write(b) 将指定字节的数据写入到输出流
int write (byte[] b) 将指定字节数组的内容写入输出流
int write (byte[] b,int off,int len) 将指定字节数组从 off 位置开始的 len 字节的内容写入输出流
close() 关闭数据流,当完成对数据流的操作之后需要关闭数据流
flush() 刷新输出流,强行将缓冲区的内容写入输出流

(3)Reader类字符输入流

 Reader类中的read()方法
方法名及返回值类型说明
int read() 从输入流中读取一个字符,并把它转换为 0~65535 的整数。如果返回 -1, 则表示
已经到了输入流的末尾。
int read(char[] c) 从输入流中读取若干个字符,并把它们保存到参数 c指定的字符数组中.该方
法返回读取的字符数,如果返回 -1,则表示已经到了输入流的末尾
int read(char[] c,int off,int len) 从输入流中读取若干个字符,并把它们保存到参数 c 指定的字符数组中。其中,
off 指定在字符数组中开始保存数据的起始下标,len 指定读取的字符数。该方法返
回实际读取的字符数,如果返回 -1,则表示已经到了输入流的末尾

(4)Writer字符输出流

Writer类中的write()方法和append()方法
方法名及返回值类型说明
void write(int c) 向输出流中写入一个字符
void write(char[] cbuf) 把参数 cbuf 指定的字符数组中的所有字符写到输出流中
void write(char[] cbuf,int off,int len) 把参数 cbuf 指定的字符数组中的若干字符写到输出流中。其中,off 指定
字符数组中的起始下标,len 表示元素个数
void write(String str) 向输出流中写入一个字符串
void write(String str, int off,int len) 向输出流中写入一个字符串中的部分字符。其中,off 指定字符串中的起
始偏移量,len 表示字符个数
append(char c) 将参数 c 指定的字符添加到输出流中

三、例子

实现文件复制(使用字节流)

public static void copyFileByStream(File source, File target) {
        // 判断源文件是否存在,如果不存在,就退出程序
        if (!source.exists()) {
            System.out.println("源文件不存在,程序退出");
            System.exit(0);
        }
        // target.getParentFile()表示用来获取目标对象的父目录对象
        // 如果目标文件路径不存在,就创建
        if (!target.getParentFile().exists()) {
            target.getParentFile().mkdirs();
        }

        InputStream is = null;
        OutputStream os = null;

        try {
            // 准备输入流
            is = new FileInputStream(source);
            // 准备输出流
            os = new FileOutputStream(target);
            // 准备一个数组,用来存放读写的数据
            byte[] b = new byte[1024];
            int len = 0;
            // read(b)实现读取操作,数据存入b数组,返回读取长度给len,当所有内容都读取完毕,len=-1
            while ((len = is.read(b)) != -1) {
                // 实现写的操作
                os.write(b, 0, len);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (is != null) {
                    is.close();
                }
                if (os != null) {
                    os.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
    public static void main(String[] args) {
        File source = new File("D:\\java\\Java高级\\myfile\\a.txt");
        File target = new File("D:\\java\\Java高级\\myfile\\b.txt");
        copyFileByStream(source, target);
    }

 

posted @ 2022-08-14 14:30  Tmillion  阅读(668)  评论(0编辑  收藏  举报