文章目录

  • Java IO流及文件操作
  • 文件概念
  • 流介绍
  • IO流体系结构
  • 流的实现类
  • 流的划分
  • 按照方向划分
  • 按照数据传输单元划分
  • 按照功能划分
  • IO流的超类
  • 字节流顶层抽象类
  • 字符流顶层抽象类
  • File类介绍
  • File类构造函数
  • File类的基本操作


Java IO流及文件操作

文件概念

文件: 文件是

保存数据的地方,比如我们日常生活中经常使用的word文档,txt文本文件,excel文件,图片…这些都是文件。

io流合并文件内容 java java io流写文件_io流合并文件内容 java

流介绍

在Java中所有的数据都是使用读写的,是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或者抽象。的本质是数据的传输,作用在数据源和程序之间建立通道,根据数据传输的特性将抽象为各种类,方便更直观的进行数据操作。

IO流体系结构

io流合并文件内容 java java io流写文件_io流合并文件内容 java_02

流的实现类

io流合并文件内容 java java io流写文件_io流合并文件内容 java_03

流的划分

按照方向划分

输入流: 输入就是将数据从各种输入设备(文件、键盘等)中读取到内存中。

输出流: 输出就是将数据写入到各种输出设备(比如:文件、显示器、磁盘等)。

io流合并文件内容 java java io流写文件_后端_04


io流合并文件内容 java java io流写文件_Java_05

按照数据传输单元划分

字节流: 以字节为单位传输数据的流 InputStreamOutputStream字符流: 以字符为单位传输数据的流 ReaderWriter

按照功能划分

节点流: 用于直接操作目标设备的流,也叫低级流 , 例如:FileInputStream(D:\\text.txt)过滤流: 对一个已存在流进行包装,以提供更强大和灵活的读写功能,也叫高级流 或者处理流 ,例如:

BufferedInputStream(new FileInpuStream(D:\\text.txt))

io流合并文件内容 java java io流写文件_Java_06

IO流的超类

字节流顶层抽象类

InputStream:字节输入流超类
OutputStream:字节输出流超类

字节流 传输的单位是字节(8bit)
InputStreamOutputStream都属于字节流的超类,他们是抽象类,不能直接使用,需要用他们相应的子类来实例化,在Java API中所有以这两个类为后缀的类均属于字节流,
例如:FileInputStreamFileOutputStream分别属于文件字节输入流文件字节输出流

字符流顶层抽象类

Reader:字符输入流超类
Writer:字符输出流超类

字符流 传输单位是字符(在UTF-8编码中一个中文字符占3个字节24bit)
ReaderWriter都属于字节流的超类,也是抽象类,需要子类来实现实例化,Java API中所有以这两个类为后缀名的类都属于字符流
例如:FileReaderFileWriter分别为文件字符输入流文件字符输出流

File类介绍

File类 主要是对文件和目录的抽象表示
文件可以简单的理解为,在硬盘设备上保存数据的一种形式
文件一共可以分为两部分组成:属性 (文件大小,文件名、文件类型)和内容 (文件中存放内容)

File类 提供了对文件的的创建、删除、查找等操作,主要特点如下:

1、文件和目录在Java中抽象为File类
2、对于File而言,封装的并不是真正的文件,封装的仅仅是一个路径名,磁盘文件本身是可以存在的,也可以不存在
3、文件的内容不能用File读取,而是通过流来读取,File对象可以作为流的来源地和目的地

File类构造函数

1. 将路径字符串抽象为File实例,路径字符串可以是相对路径,也可以是绝对路径。

public File(String pathname)

2. 给定一个父路径File实例和子路径名来构建file实例

public File(File parent, String child)

3. 通过uri来创建一个file实例

public File(URI uri)

代码示例

public class FileTest01 {
    public static void main(String[] args) {
        //File(String pathname) 
        //将路径字符串抽象为File实例,路径字符串可以是相对路径,也可以是绝对路径
        String pathName = "e:\\hello.txt";
        File file = new File(pathName);

        //File(File parent, String child)  
        //给定一个父路径File实例和子路径名来构建File实例
        String parentName = "e:";
        String child = "test01.txt";
        File file1 = new File(parentName);
        File file2 = new File(file1, child);

        //File(String  parent, String child)
        //给定一个父路径名和子路径名来构建File实例
        File file3 = new File(parentName, child);
    }
}

File类的基本操作

1. boolean createNewFile(); 当该名称的文件不存在时,创建空的文件并返回true,当文件存在时,返回false
代码示例

public class FileTest02 {
    public static void main(String[] args) {
        String pathname = "e:\\Java\\hello.txt";
        File file = new File(pathname);
        try {
            boolean newFile = file.createNewFile();
            System.out.println(newFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行结果:

io流合并文件内容 java java io流写文件_io流合并文件内容 java_07


2. boolean delete() 立即删除文件或目录

代码示例

public class FileTest03 {
    public static void main(String[] args) {
        String pathname = "e:\\Java\\hello.txt";
        File file = new File(pathname);
        file.delete();
    }
}

运行结果:

io流合并文件内容 java java io流写文件_开发语言_08


3. boolean exists(); 文件或者目录存在返回true,否则返回false

代码示例

public class FileTest04 {

    public static void main(String[] args) {
        String pathname = "e:\\Java\\hello.txt";
        File file = new File(pathname);
        try {
            file.createNewFile();//创建文件
            if (file.exists()) {//判断文件是否存在
                System.out.println("文件存在");
            } else {
                System.out.println("文件不存在");
            }

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

    }

}

运行结果:

io流合并文件内容 java java io流写文件_开发语言_09


4. boolean isDirectory() 返回true:当前是目录当前文件夹

io流合并文件内容 java java io流写文件_io流合并文件内容 java_10


代码示例

public class FileTest05 {
    public static void main(String[] args) {
        String pathname = "e:\\Java\\a";
        File file = new File(pathname);
        if (file.isDirectory()) {
            System.out.println("是目录");
        }else {
            System.out.println("不是目录");
        }
    }
}

运行结果:

io流合并文件内容 java java io流写文件_io流合并文件内容 java_11


5. boolean mkdir() true: 创建成功 false: 目录已经存在

代码示例

public class FileTest06 {
    public static void main(String[] args) {
        File file = new File("e:\\Java\\b");
        if (file.mkdir()) {
            System.out.println("目录创建成功");
        }else {
            System.out.println("目录已经存在");
        }
    }
}

运行结果:

io流合并文件内容 java java io流写文件_Java_12


6. boolean mkdirs() true: 创建多级目录

代码示例

public class FileTest08 {
    public static void main(String[] args) {
        File file = new File("e:\\Java\\b\\c\\d\\e");
        file.mkdirs();
    }
}

运行结果:

io流合并文件内容 java java io流写文件_java_13


7. String getParent() 获取父目录

代码示例

public class FileTest09 {
    public static void main(String[] args) {
        File file = new File("e:\\hello.txt");
        String parent = file.getParent();
        System.out.println(parent);
    }
}

运行结果:

io流合并文件内容 java java io流写文件_后端_14


8. String getAbsolutePath() 获取File对象的绝对路径名称

代码示例

public class FileTest10 {
    public static void main(String[] args) {
     String pathname = ".";
        File file = new File(pathname);
        String absolutePath = file.getAbsolutePath();
        System.out.println(absolutePath);
    }
}

运行结果:

io流合并文件内容 java java io流写文件_io流合并文件内容 java_15


9. String[] list() 返回目录中的文件和目录的名称的字符串数组

当前Java目录下的文件和目录:

io流合并文件内容 java java io流写文件_开发语言_16


🚀 返回目录下指定内容时,需要实现FilenameFilter接口进行过滤

public interface FilenameFilter {
    //需要实现accept方法 根据当前的文件或者目录name作出处理
    //满足为true时返回,否则过滤
    //参数:dir表示父目录File实例 name:表示当前文件或者目录的名称
    boolean accept(File dir, String name);
}

代码示例

public class FileTest11 {
    public static void main(String[] args) {
        File file = new File("e:\\Java");
        String[] list = file.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                boolean file1 = new File(dir, name).isFile();//过滤掉目录
                return file1;
            }
        });
        
        for (String s : list) {
            System.out.print(s + " ");
        }
    }
}

运行结果:

io流合并文件内容 java java io流写文件_io流合并文件内容 java_17

10. File[] listFiles() 回目录中的文件和目录的名称的file实例数组

当前Java目录下的文件和目录:

io流合并文件内容 java java io流写文件_开发语言_16


代码示例

public class FileTest12 {
    public static void main(String[] args) {
        File file = new File("e:Java");
        File[] files = file.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return name.startsWith("t");//返回以 t 开头的文件或目录
            }
        });

        for (File f : files) {
            System.out.println(f.getName());
        }
    }
}

运行结果:

io流合并文件内容 java java io流写文件_开发语言_19