IO流介绍

Posted 小布丁value

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IO流介绍相关的知识,希望对你有一定的参考价值。

IO流介绍

https://blog.csdn.net/qq_44543508/article/details/102831084?
1.输出流,输入流
2.字节流,字符流
3.介质流,过滤流
4.基类:inputStream,OutputStream,Reader,writer
5.fielXXX, BufferXXX, ObjectXXX…
6.序列化和反序列化
7.IO涉及的设计模式:适配器模式和装饰器模式
8.File类
9.RandomAccessFile:随机访问文件类型
java8类型
lambda,stream流

参考书籍

《java编程思想》第18章
《java核心技术 卷2》第一章

IO流介绍
流是一个抽象的概念,当程序读取数据时,就会开启一个通往数据源的流,这个数据源可以是文件,内存或是网络连接
当程序写入数据时,就会开启一个通往目的地的流
java中把不同到的来源或者目的地的数据都统一抽象为数据流

本质:就是对数据的传输,数据的结合,有方向性

一,IO流

在这里插入图片描述
在这里插入图片描述

Java中流的划分

1.1)按流向分:

输入流:程序可以从中读取数据的流
输出流:程序能向其中写入的流
在这里插入图片描述
输入流:从数据源读取数据流到程序(数据源: 磁盘\\u盘\\网络\\键盘)
输出流:从程序写入到目的地(目的地:磁盘\\U盘\\网络\\显示器)

1. 2)按数据传输单位划分:
字节流:以字节为单位传输数据的流
字符流:以字符为单位传输数据的流

1.3)按功能划分:
节点流: 用于直接操作目标设备的流
过滤流:对一个已存在的流进行包装,以提供更强大和灵活的读写功能

二, File 类介绍

1.java.io.File 类是专门对文件进行操作的类,只能对文件本身进行操作,不能对文件内容进行操作。
2.java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
怎么理解上面两句话?其实很简单!

1.第一句就是说File跟流无关,File类不能对文件进行读和写也就是输入和输出!
2.第二句就是说File主要表示类似D:\\文件目录1与D:\\文件目录1\\文件.txt,前者是文件夹(Directory)后者则是文件(file),而File类就是操作这两者的类。
2.1构造方法
在java中,一切皆是对象,File类也不例外,不论是哪个对象都应该从该对象的构造说起,所以博主来分析分析File类的构造方法。首先从API开始着手

 1.File(String pathname) 

1.File(String pathname) 通过给定路径名字符串转换为抽象路径名来创建新的File实例。

 2.File(String parent, String child) 
  1. 父路径名和子路径名来构建file实例
3.File(File parent, String child)

3.根据父路径File实例和子路径名来构建实例
File类的注意点:
1.一个File对象代表硬盘中实际存在的一个文件或者目录。
2.File类构造方法不会给你检验这个文件或文件夹是否真实存在,因此无论该路径下是否存在文件或者目录,都不影响File对象的创建。
2…2常用方法
File的常用方法主要分为获取功能、获取绝对路径和``相对路径、判断功能、创建删除功能的方法
2.2.1获取功能的方法
注意本文全部以D/IO下的空文件为例
在这里插入图片描述

1、public String getAbsolutePath() :返回此File的绝对路径名字符串。

2、public String getPath() :将此File转换为路径名字符串。

3、public String getName() :返回由此File表示的文件或目录的名称。

4、public long length() :返回由此File表示的文件的长度。
```java
       // 文件路径名
        String path="D:\\\\IO";
        File file = new File(path); //相当于D:\\IO
        String path1="D:\\\\IO\\\\txt";
        File file1 = new File(path1);//相当于D:\\IO\\txt
        //通过父路径和子路径字符串
        String parent ="D:\\\\IO";
        String child="IO.txt";
        File file2=new File(parent,child);//相当于D:\\IO\\txt
        // 通过父级File对象和子路径字符串
        File parentDir = new File("D:\\\\IO");
        String child1="IO//txt";
        File file4 =new File(parentDir,child1);////相当于D:\\IO\\txt
 public static void main(String[] args) {
        // 文件路z径名
        String path="D:\\\\IO";
        File file = new File(path); //相当于D:\\IO
        System.out.println("文件绝对路径:"+file.getAbsolutePath());
        System.out.println("文件构造路径:"+file.getPath());
        System.out.println("文件名称:"+file.getName());
        System.out.println("文件长度:"+file.length()+"字节");
    }

文件绝对路径:D:\\IO
文件构造路径:D:\\IO
文件名称:IO
文件长度:0字节
2.1.2 绝对路径和相对路径
绝对路径:一个完整的路径,以盘符开头,(windows:**C:\\ linux/mac: / )
相对路径:一个简化的路径,不以盘符开头 //IO.txt//b.txt

1、路径是不区分大小写
2、路径中的文件名称分隔符windows使用反斜杠,反斜杠是转义字符,两个反斜杠代表一个普通的反斜杠

"."表示当前路径 “…”表示父路径
分隔符:
windows分隔符:
mac分割符:/
java中有常量分隔符:File.separator ;//根据系统不同自动生成对应分隔符
String path = “test”+File.separator+“test.txt”;
//windows test\\test.txt
//linux test/test.txt

String path="test"+File.separator+"test.txt";
        System.out.println(path);

代码运行结果: test\\test.txt
3.创建删除功能的方法

  1. public boolean createNewFile():文件不存在,创建一个新的空文件并返回true,文件存在,不创建文件并返回false。
  2. public boolean delete():删除由此File表示的文件或目录。
  3. public boolean mkdir() :创建由此File表示的目录。
  4. public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。
    其中,mkdirs()和mkdir()方法类似,但mkdir(),只能创建一级目录,mkdirs()可以创建多级目录比如//a//b//c,所以开发中一般用mkdirs();

方法一:

public class FileCreateDelete {
    public static void main(String[] args) throws IOException {
        //文件的创建
        File f = new File("/IO/txt");
        System.out.println("是否存在"+f.exists());//false
        System.out.println("是否创建"+f.createNewFile());//true
        System.out.println("是否创建"+f.createNewFile());//false
        System.out.println("是否存在"+f.exists());//true
        System.out.println();
        //目录的创建
        File f1=new File("/IO/txt1");
        System.out.println("是否存在"+f1.exists());
        System.out.println("是否创建"+f1.mkdir());
        System.out.println();
    }
}

在这里插入图片描述
创建多级目录

	  File F4=new File("/IO/txt1//txt2//txt3");
        System.out.println(F4.mkdir());//false
        File F5=new File("/IO/txt1//txt2//txt3");
        System.out.println(F4.mkdirs());//true

在这里插入图片描述
文件的删除

System.out.println(F5.delete());

在这里插入图片描述
方法二:

public class FileCreateDelete {
    public static void main(String[] args) {
         File F=new File("/IO/ADA");
        try {
           boolean newFile = F.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述
4. 目录的遍历

  • 4.1 public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
public class FileFor {
    public static void main(String[] args) {
        File f=new File("/IO");
        //获取当前目录下的文件以及文件夹的名称。
       String [] names  =f.list();
       for(String i : names){
           System.out.println(i);
       }
    }
}

ADA
txt
txt1
4.2 public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。

//获取当前目录下的文件以及文件夹对象,只要拿到了文件对象,那么就可以获取更多信息
        File[]  files = f.listFiles();
       for(File i : files){
           System.out.println(i);
       }

\\IO\\ADA
\\IO\\txt
\\IO\\txt1
listFiles在获取指定目录下的文件或者文件夹时必须满足下面两个条件
1,指定的目录必须存在
2,指定的必须是目录。否则容易引发返回数组为null,出现NullPointerException异常
5.FilenameFilter接口详解
FilenameFilter:文件名过滤器。这名字起的,没说的,通俗易懂。就是在文件集合中过滤出我想要的文件。

public interface FilenameFilter {
    //参数为目录和指定过滤名称
    //返回结果 true: 可以返回  false:不能返回
    boolean accept(File dir, String name);
}

不要着急!稍后你会看到这个接口和抽象方法的作用。提示:这里会显示出策略模式的强大之处。
我都是以下面这个文件来举例。
在这里插入图片描述
现在,我想要在D:\\eclipse下找到以 .xml 结尾的文件,看下面我写的代码

public class FilenameFilterDemo {
    public static void main(String[] args) {
        File file = new File("D:\\\\BaiduNetdiskDownload\\\\.idea");
        //创建一个过滤器实例
        FilenameFilterDemo filenameFilterDemo = new FilenameFilterDemo();
        FileFilter fileFilter = filenameFilterDemo.new FileFilter();
        String [] list = file.list(fileFilter);
        for(String i : list){
            System.out.println(i);
        }
    }
    class FileFilter implements FilenameFilter {
        @Override
        public boolean accept(File dir, String name) {
            //String 中的endWith(String str)方法 ,筛选出以Str结尾的字符串
            if (name.endsWith(".xml")) {
                return true;//可以返回
            }
            return false;//不可以返回
        }
    }
}

misc.xml
modules.xml
workspace.xml

以上是关于IO流介绍的主要内容,如果未能解决你的问题,请参考以下文章

阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_5_InputStreamReader介绍&代码实现

阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_4_OutputStreamWriter介绍&代码实现

缓冲流介绍和使用

第3章 缓冲流介绍和使用

JavaIO 流IO流介绍

IO流介绍