如果想观看更多Java内容 可上我的个人主页关注我,地址子逸爱编程-CSDN博客https://blog.csdn.net/a15766649633?spm=1000.2115.3001.5343使用工具 IntelliJ IDEA Community Edition 2023.1.4
使用语言 Java8
代码能力快速提升小方法,看完代码自己敲一遍,十分有用
目录
1.File类
1.1 File简述
1.2 使用File操作文件和目录
1.2.1 创建File对象
1.3 File类的常用方法
1.4 使用方法贯穿示例
1.4.1 示例代码
1.5 打印盘中首目录的所有文件名方法
2.I(Input)/O(output)流概述
2.1 I/O流的概念与作用
2.2 流的分类
2.2.1 按流向划分:输入流和输出流
2.2.2 按处理单元划分:字节流和字符流
2.2.3 按流的角色划分:节点流和处理流
1.File类
1.1 File简述
在程序运行的过程中,输入/输出是常用的操作,也是必需的部分。允许程序读取外部数据,包括来自磁盘,光盘,文件等存储设备的数据,这类操作属于输入数据;同时允许程序记录运行状态,将程序数据输出到磁盘、光盘、文件等存储设备中,这类操作属于输出数据,数据的输入和输出离不开文件,经常使用到的文件类型有很多,如扩展名为.txt、.doc、.bmp、.class的文件等。
File类是java.io包下代表操作与平台无关的文件和目录的类,也就是说,如果需要在程序中操作文件或目录,就可以通过File类实现对文件或目录的新建、删除、重命名等操作。
1.2 使用File操作文件和目录
1.2.1 创建File对象
在程序中,一个File对象可以代表一个文件或目录。它可以查出与文件相关的信息,如名称、修改日期、文件大小等。File类的构造方法定义如下:
public File(String pathName)
其中,pathName指文件路径。因此,在创建File对象的时候必须设置文件路径。
例如,操作C盘下的test.txt文件,创建File对象的语句如下:
File file=new File("C:\\test.txt");
提示:
在Windows操作系统中,文件路径名中的路径分隔符可以使用正斜杠"/",如C:/test.txt;也可以使用反斜杠"\",但必须写成"\\",其中第一个"\"表示转义符,如"C:\\test.txt"。
pathNmae可以是相对路径也可以是绝对路径。绝对路径是以根目录(Windows系统中的盘符)开头的完整路径。例如:
File file=new File("C:\\test.txt");
在项目中使用相对路径时,需要放在src同级目录才可以点出来,示例如下:
1.3 File类的常用方法
boolean createNewFile()
创建新文件
boolean delete()
删除文件
boolean exists()
判断文件是否存在
存在就为true,不存在就为false
Boolean isFile()
判断是否是文件
是的话就是true不是就是false
boolean isDirectory()
判断是否是目录(文件夹)
是的话就是true不是就是false
long length()
返回文件长度,单位为字节;若文件不存在,则返回OL
String getPath()
返回文件名相应的路径
String getAbsolutePath()
返回此对象表示的文件绝对路径
这里只列举了File类的一些常用方法,在实际开发中,如需完成对File类的更多操作,则可随时查阅API帮助文档。
1.4 使用方法贯穿示例
在方法中使用IO流时,可能会发生编译异常(检查异常:FileNotFoundException或IOException),这时需要进行异常处理才能进行编译;
1.4.1 示例代码
在以上代码中,为保证程序的严谨性,避免错误发生,在创建新文件或删除文件之前,都会使用if语句进行判断,以避免重复创建文件或删除不存在的文件 。
1.5 打印盘中首目录的所有文件名方法
listFIles()方法代表的就是文件集合;
2.I(Input)/O(output)流概述
2.1 I/O流的概念与作用
File类能够实现对文件和目录的创建、删除等基础性操作,但是无法实现对文件内容的操作,也就是无法实现对文件的读写。而java中的I/O流能够方便地实现数据的输入和输出,是实现文件读写的基础。
如何解释I/O呢?
I即input,指读入操作,O即output,指写出操作。
流:指一连串流动的字符,是以先进先出的方式发送和接收数据的通道。既然是流,必然有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘、文件等,甚至可以是Internet上的某个统一资源定位符。所谓I/O流就是实现数据输入和输出的流,在I/O流的基础上,可以实现对文件的读写操作。那么,文件的读写指什么?
读文件,是指把文件中的数据读取到内存中,反之,写文件就是把内存中的数据写到文件中。
java中所有流类型都封装到java.io包中,用以实现I/O操作。下面从不同的角度对流进行分类,它们在概念上会有重叠的地方。
2.2 流的分类
2.2.1 按流向划分:输入流和输出流
流具有明确的方向性,按照流的流向来分,可以分为输入流和输出流 :
输入流
- 只能从中读取数据,而不能写入数据的流,实现程序从数据源中读数据,数据源指文件、磁盘能够存储数据的媒介
- 程序从数据源中读数据
输出流
- 只能向其写入数据,而不能从中读数据的流,实现程序向目标数据源中写数据
- 程序去写目标数据源
Java的输入流主要以InputStream和Reader作为基类(父类),而输出流则主要以OutputStream和Writer作为基类(父类)。它们都是一些抽象类,无法直接实例化对象。
按照流的流向进行分类时,输入流完成数据读入操作,输出流完成数据写出操作,这里的"出"和"入"一定是从程序运行所在内存的角度来论述的。如果从文件或磁盘的角度来论述,方向恰恰相反,混淆了概念就会引发错误。
2.2.2 按处理单元划分:字节流和字符流
按照处理单元划分,Java中的流可分为字节流和字符流,它们的区别在于操作的数据单元不同。
字节流
- 以8位字节位为操作数据单元的流,可用于操作二进制数据(如操作图片文件)
- 字节流是一个一个字节读取的
字符流
- 以16位的字符作为操作数据单元的流,可用于操作文本数据
- 字符流是几个几个读取的
字节流和字符流的用法几乎相同。它们向下细分,还可以划分字节输入流、字节输出流、字符输入流、字符输出流。
通俗地理解,可以把I/O流看作一个水管,这个水管中依次排列着许多水滴,每滴水滴就是一个处理单元,即一个字节或字符。在字节流中每滴水滴是一个字节,在字符流中每滴水滴时一个字符。
2.2.3 按流的角色划分:节点流和处理流
按流的角色划分,Java中的流可分为节点流和处理流:
节点流
可以直接向一个特定的存储介质(如磁盘、文件)读写数据的流。当使用节点流进行读写数据操作时,程序直接连接到数据源。
处理流
- 用于对一个已存在的流进行连接和封装,是通过封装后的流实现读写操作的流。
- 程序连接数据源是先封装再连接数据源
处理流就是封装了节点流;
从以上的介绍可以看出,当使用处理流进行读写操作时,程序并不会直接连接到实际的数据源。使用处理流包装节点流,程序通过处理流执行输入和输出功能,让节点流与文件或磁盘等存储介质交互。它可以隐藏底层节点流的差异,并且对外提供更加方便的输入和输出的方法,因此节点流也被称为包装流,它的优势如下:
- 对开发人员来说,使用处理流进行I/O操作更简单。
- 使用处理流的执行效率高。