Java文件操作

1. 文件

我们平时很多时候写的代码,都是保存在内存中的,一旦断电或者退出后,里面的数据全部都会丢失,无法长时间保存,于是,文件的出现,可以有效地解决这个问题。
在针对硬盘这种持久化的IO设备是,当我们想保存数据时,往往并不是保存为一个整体,而是独立为一个个的单位进行保存,这个独立的单位就被抽象为文件的概念。
同时,文件除了有数据内容外,还有一部分和数据无直接关系的信息,例如:文件名,文件类型,文件大小等等,这些信息并不作为文件的数据而存在,因此把这部分的信息视为文件的元信息。

1.1. 树形结构组织和目录

若文件越来越多,那对文件的管理也成为了一个问题,于是有了对文件的系统管理。
对文件的系统管理都是按照层级结构进行租住,也就是数据结构中学习的树形结构,这样,一种专门用来存放管理信息的特殊文件产生了,也就是我们平时所谓的文件夹或者目录。

1.2. 文件路径

1.2.1. 绝对路径

只有树形结构组织,想要定位文件所在的位置,也是一个需要解决的问题,于是,可以从树形结构的角度来看,树中的每个节点都可以被一条从根开始的,一直到达的节点的路径所描述,这种描述方式便被称为文件的绝对路径。
例如:C:\Program Files\Office

1.2.2. 相对路径

若路径不从根节点开始,而是从任意节点出发,来进行路径的描述,这种描述方式便被称为相对路径。
例如:…\Program Files\Office
注意:
.代表当前节点
…代表父节点

1.2.3. 文件数据类型

文件数据常被分为文本数据和二进制数据。
文本数据
可按照一定的字符集编码解释为文本的数据。
二进制数据
不可直接被解释为文本的数据。

2. Java操作文件

在Java中,可以通过java.io.File类来对一个文件(包括目录)进行抽象的描述。电脑有File对象,并不代表真实存在该文件(即File为null)。

2.1. 常用函数

File常用函数
注意
文件创建:文件的父目录存在,并且文件不存在,则可以使用createNewFile()函数创建文件。
目录创建:若文件的父目录存在,并且文件不存在,则可以使用mkdir()函数。若想两天不存在的父目录一同创建,则使用mkdirs()函数。
删除:普通文件则可以直接删除,而目录文件则要求为空目录才可以被删除。

2.2. 文件内容的读写

文件内容的读写也被称为数据流,可以把数据理解为水池中的水,文件理解为是水池,对文件的写操作被认为是向水池中灌水,对文件的度操作被认为是从水池中接水。
因此可以通过使用InputStream和OutputStream类来实现对文件的读写操作。
数据流

2.2.1. 文件的读操作

InputStream常用的函数:
InputStream
但InputStream只是一个抽象类,实际使用中还需要计提的实现类,所以一般使用FileInputStream类。
FileInputStream构造方法
FileInputStream构造方法
利用 Scanner 进行字符读取
上述例子中,我们看到了对字符类型直接使用 InputStream 进行读取是非常麻烦且困难的,所以,可以使用一种我们之前比较熟悉的类来完成该工作,就是 Scanner 类。
Scanner
示例:

import java.io.*;
import java.util.*; 
// 需要先在项目目录下准备好一个 hello.txt 的文件,里面填充 "你好中国" 的内容
public class Main {
	public static void main(String[] args) throws IOException {
		try (InputStream is = new FileInputStream("hello.txt")) {
			try (Scanner scanner = new Scanner(is, "UTF-8")) {
				while (scanner.hasNext()) {
					String s = scanner.next();
					System.out.print(s);
				}
			}
		}
	}
}

2.2.2. 文件的写操作

OutputStream常用的函数:
OutputStream常用的函数
OutputStream 同样只是一个抽象类,要使用还需要具体的实现类。我们现在还是只关心写入文件中,所以使用 FileOutputStream类。
利用 PrintWriter 找到我们熟悉的方法
但直接用数据流的处理还是会有点不太方便,于是,可以使用PrintWriter类来完成输出。其中这包含我们熟悉的
print、println、printf 方法。
示例:

import java.io.*;
public class Main {
	public static void main(String[] args) throws IOException {
		try (OutputStream os = new FileOutputStream("output.txt")) {
			try (OutputStreamWriter osWriter = new OutputStreamWriter(os, "UTF- 8")) {
				try (PrintWriter writer = new PrintWriter(osWriter)) {
					writer.println("我是第一行");
					writer.print("我的第二行\r\n");
					writer.printf("%d: 我的第三行\r\n", 1 + 1);
					writer.flush();
				}
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值