javaIO
概述
IO指的就是Input/Output,即输入和输出。以内存为中心:
- Input指从外部读入数据到内存,例如,把文件从磁盘读取到内存,从网络读取数据到内存等等。
- Output指把数据从内存输出到外部,例如,把数据从内存写入到文件,把数据从内存输出到网络等等。
InputStream / OutputStream
IO流以byte(字节)为最小单位,因此也称为字节流。例如,我们要从磁盘读入一个文件,包含6个字节,就相当于读入了6个字节的数据。这6个字节是按照顺序读入的,所以是输入字节流
反过来讲这6个字节从内存写入磁盘文件就是输出字节流
按照英译 input –>输入 output 输出
在java当中inputstream代表的就是输入字节流 output代表的就是输出字节流
Reader / Writer
按照英译 reader 读 writer写 reader就是读取字符流 writer就是写入字符流
使用Reader,数据源虽然是字节,但我们读入的数据都是char类型的字符,原因是Reader内部把读入的byte做了解码,转换成了char。使用InputStream,我们读入的数据和原始二进制数据一模一样,是byte[] 数组,但是我们可以自己把二进制byte[]数组按照某种编码转换为字符串。究竟使用Reader还是InputStream,要取决于具体的使用场景。如果数据源不是文本,就只能使用InputStream,如果数据源是文本,使用Reader更方便一些。Writer和OutputStream是类似的。
同步和异步
同步IO是指,读写IO时代码必须等待数据返回后才继续执行后续代码,它的优点是代码编写简单,缺点是CPU执行效率低。
而异步IO是指,读写IO时仅发出请求,然后立刻执行后续代码,它的优点是CPU执行效率高,缺点是代码编写复杂。
Java标准库的包java.io提供了同步IO,而java.nio则是异步IO。上面我们讨论的InputStream、OutputStream、Reader和Writer都是同步IO的抽象类,对应的具体实现类,以文件为例,有FileInputStream、FileOutputStream、FileReader和FileWriter。
File类的使用
1.构造函数 放入指定路径
放置路径时候可以用.表示当前路径,..表示上级路径
File对象有3种形式表示的路径,一种是getPath(),返回构造方法传入的路径,一种是getAbsolutePath(),返回绝对路径,一种是getCanonicalPath,它和绝对路径类似,但是返回的是规范路径。
1 | File f1 = new File("."); |
输出
.
D:\work\MyProject\spring-faith-system.
D:\work\MyProject\spring-faith-system
2.使用isFile和isDirectory来判断这个File类中的路径是否是文件,是否是文件夹。
用File对象获取到一个文件时,还可以进一步判断文件的权限和大小:
- boolean canRead():是否可读;
- boolean canWrite():是否可写;
- boolean canExecute():是否可执行;
- long length():文件字节大小。
3.创建删除文件
当File对象表示一个文件时,可以通过createNewFile()创建一个新文件,用delete()删除该文件
1 | if (createFile.isFile()){//文件已经存在 |
4.遍历文件夹
当你知道一个File对象是表示一个文件夹的时候你可以通过使用list(),listFiles()列出目录下的文件和子目录名。listFiles()提供了一系列的重载方法,可以过滤掉不想要的文件和目录
1 | File desk=new File("C:\\Users\\faith\\Desktop"); |
和文件操作类似,File对象如果表示一个目录,可以通过以下方法创建和删除目录:
- boolean mkdir():创建当前File对象表示的目录;
- boolean mkdirs():创建当前File对象表示的目录,并在必要时将不存在的父目录也创建出来;
- boolean delete():删除当前File对象表示的目录,当前目录必须为空才能删除成功。
InputStream使用
- Title: javaIO
- Author: faith team
- Created at: 2023-08-02 14:13:05
- Updated at: 2025-11-29 09:01:08
- Link: https://redefine.ohevan.com/2023/08/02/20230802javaIO/
- License: This work is licensed under CC BY-NC-SA 4.0.