JavaIO的整体结构以及File类的使用
作者:鱼仔
博客首页: https://codeease.top
公众号:Java鱼仔
# 一、概述
IO即输入输出系统,java的IO总体可以分为字符流(Reader、Writer)和字节流(InputStream、OutputStream)。
字节流直接对二进制数据进行操作;字符流在操作的时候使用了缓冲区(即内存)。
字节流一般用来对媒体文件操作,比如图片;字符流一般可用来操作文本文件,如txt文件。
掌握javaIO需要掌握一个类(File)、一个接口(Serializable)和四个抽象类(Reader、Writer、InputStream、OutputStream)
# 二、JavaIO的整体结构
# 三、File类
File类是在整个java.io包中里面唯一一个与文件本身有关的操作类,通过查看官方文档Java PlatForm SE 8,可以看到File类一共提供了四种构造方法:
File(File parent, String child)
File(String pathname)
File(String parent, String child)
File(URI uri)
1
2
3
4
2
3
4
上面四种构造方法包含了所有可能出现的路径格式
# 3.1、FIle类对文件的主要操作:
File类对文件的主要操作是以下几个:
boolean createNewFile() 创建文件
boolean delete() 删除文件
boolean exists() 判断文件是否存在
1
2
3
2
3
通过代码简单尝试:
public static void main(String[] args) throws IOException {
File file=new File("F://testFile.txt");
if (file.exists()){
file.delete();
}else {
file.createNewFile();
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
注意两个问题:
1.删除和新建文件是存在延迟的,并非事实。
2.不同的操作系统之间路径分隔符不同,因此可以使用File.separator代替分隔符
File file=new File("F:"+File.separator+"testFile.txt");
1
# 3.2、File类对目录的主要操作
boolean mkdir() 创建单级目录
boolean mkdirs() 创建多级目录
String getParent() 以String方式获取父目录
File getParentFile() 以File方式获取父目录
1
2
3
4
2
3
4
当我们需要创建一个包含多级目录的文件时,就可以使用上述的方法
public static void main(String[] args) throws IOException {
File file=new File("F:"+File.separator+"二级目录"+File.separator+"testFile.txt");
if (!file.getParentFile().exists()){
file.getParentFile().mkdirs();
}
file.createNewFile();
}
1
2
3
4
5
6
7
2
3
4
5
6
7
# 3.3、对文件信息的操作
File类提供了许多对文件信息的操作:
boolean canExecute() 判断文件是否可执行
boolean canRead() 判断文件是否可读
boolean canWrite() 判断文件是否可写
String getAbsolutePath() 获取文件绝对路径
String getName() 获取文件或目录的名称
boolean isDirectory() 判断是否是目录
boolean isFile() 判断是否是文件
long lastModified() 最后修改时间
long length() 文件的大小
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 3.4、获取文件目录信息
String[] list() 返回所有子目录的信息
File[] listFiles() 返回完整的路径信息
1
2
2
通过代码和结果展示:
public static void main(String[] args) throws IOException {
File file=new File("F:"+File.separator);
System.out.println(Arrays.toString(file.list()));
System.out.println(Arrays.toString(file.listFiles()));
}
1
2
3
4
5
2
3
4
5
通过递归的方式,我们可以找到某个路径下的所有完整地址
public static void main(String[] args) throws IOException {
File file=new File("F:"+File.separator);
listDIR(file);
}
public static void listDIR(File file){
if (file.isDirectory()){
File[] result=file.listFiles();
if (result!=null){
for (int i = 0; i < result.length; i++) {
listDIR(result[i]);
}
}
System.out.println(file);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 四、结论
File类的操作只针对于文件的信息,无法对文件中的内容进行操作,而想要操作文件的内容就需要使用字节流和字符流.
上次更新: 2024/07/23, 15:40:55