Java文件操作

Posted 木木林Violet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java文件操作相关的知识,希望对你有一定的参考价值。

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. 常用函数


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

2.2. 文件内容的读写

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

2.2.1. 文件的读操作

InputStream常用的函数:

但InputStream只是一个抽象类,实际使用中还需要计提的实现类,所以一般使用FileInputStream类。
FileInputStream构造方法

利用 Scanner 进行字符读取
上述例子中,我们看到了对字符类型直接使用 InputStream 进行读取是非常麻烦且困难的,所以,可以使用一种我们之前比较熟悉的类来完成该工作,就是 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 同样只是一个抽象类,要使用还需要具体的实现类。我们现在还是只关心写入文件中,所以使用 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();
				
			
		
	

以上是关于Java文件操作的主要内容,如果未能解决你的问题,请参考以下文章

蓄水池抽样算法

11. Container With Most Waterleetcode,java算法,数组,求最大水池注水量

java

水池数目 ----- 图中有几个 单块的区域

Honk's pool(二分模板题)

CTU OPEN 2017 Pond Cascade /// 思维