javaIO

faith team

概述

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
2
3
4
File f1 = new File(".");
System.out.println(f1.getPath());
System.out.println(f1.getAbsolutePath());
System.out.println(f1.getCanonicalPath());

输出

.
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
2
3
4
5
6
7
8
9
10
11
12
13
if (createFile.isFile()){//文件已经存在
System.out.println("文件已经存在!");
//删除
if (createFile.delete()){
System.out.println("删除成功!");
}else {
System.out.println("删除失败!");
}
}else{
//创建
createFile.createNewFile();
System.out.println("创建成功!");
}

4.遍历文件夹
当你知道一个File对象是表示一个文件夹的时候你可以通过使用list(),listFiles()列出目录下的文件和子目录名。listFiles()提供了一系列的重载方法,可以过滤掉不想要的文件和目录

1
2
3
4
5
6
7
8
9
10
11
12
13
File desk=new File("C:\\Users\\faith\\Desktop");
if (desk.isDirectory()){
File[] files = desk.listFiles(); //列出所有文件和子目录
printFile(files);
//筛选出.txt的文件
File [] txtFile = desk.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".txt");
}
});
printFile(txtFile);
}

和文件操作类似,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.
 Comments