目录
一、存储
1.非易失性存储(non-volatile storage)
2.缓冲区(Buffer)技术
二、文件(File)
1.文件的分类
1.1普通文件和目录文件
1.2文本文件和二进制文件
2.文件是按照树形结构组织
3.文件路径
3.1绝对路径
3.2相对路径
4.一个唯一的路径并不代表对应的文件一定存在
三、Java中的File类-----java.io.File
1.构造方法
2.File的主要方法
3.新建一个普通文件
4.新建一个目录
5.删除文件/目录
6.通过重命名的方式把一个文件移动到另一个节点
7.给定起始目录,遍历这个目录下的所有文件
一、存储
硬盘存储和内存存储,硬盘存储也叫非易失性存储1.非易失性存储(non-volatile storage)
可以再断电的情况下进行数据存储;低速存储,读写速度远低于内存2.缓冲区(Buffer)技术
文章图片
弥合速度差,针对硬盘数据的读写提出了各种各样的数据结构、算法来解决
硬盘中的数据更适合块状读取,一次性读取很多的数据,和连续读写
- 由于磁盘存储的低速性,有了缓冲区技术,为了减少硬盘的读写频次
- 操作系统会在内存中开辟一段空间
比如写入400字节的内存二、文件(File)
1、写入100字节
2、写入100字节
3、写入100字节
4、写入100字节
为了减少硬盘的读写,让达到一定条件后统一写回硬盘(应用程序主动要求冲刷缓冲区,定时冲刷、定量冲刷等)
IO中进行flush是必要的操作,否则会造成数据丢失
一种抽象的概念,表示硬盘中的数据块;
狭义上讲文件是关于硬盘中数据的抽象;
变量、对象是对内存中数据的抽象;
逻辑上讲,一个文件是由两块数据组成的,文件的元数据(管理数据)和文件内容本身
文件中的数据= 管理数据+内存数据
文件系统(FileSystem):对硬盘上的数据、文件进行直接组织和管理的一个模块1.文件的分类 1.1普通文件和目录文件
普通文件:存储普通数据,一般就是字符串1.2文本文件和二进制文件
目录文件:存储了一张表,该表就是该目录文件下,所有文件名和inode的映射关系
普通文件,根据其保存数据的不同,划分为文本文件 和二进制文件2.文件是按照树形结构组织
文本文件:保存被字符集编码的文本
二进制文件:按照标准格式保存的非被字符集编码过的文件
- 【.txt】【 .c】【 .java】都属于文本文件
- 【.doc】【.ppt】【.exe】【.zip】【.class】等等都属于二进制文件
通过路径描述结点的方式,来确定唯一一个文件3.文件路径
文章图片
目录/文件夹也是一种特殊的文件,由管理数据和内容数据组成
管理数据:名称,属于本机用户,路径...
内容数据:文件夹下有.doc文件、.txt文件等
文件路径用于定位到哪个文件,路径存在,并不代表文件一定存在3.1绝对路径
以“.”或“. .”开头的,其中“.”表示当前路径,“. .”表示当前路径的父目录(上级路径)
文件路径分为绝对路径和相对路径
- 绝对路径——无论现在在哪个位置,绝对路径都是从起点到目标
- 相对路径——从我当前所处位置,到目标位置,当前的位置变化了,描述的节点也跟着变化
从一颗数的根节点触发,到达对应节点的完整路径3.2相对路径
文章图片
一个唯一的路径一定可以描述一个唯一的节点
Windows使用反斜杠作为分割符,对于路径【C:\Program Files\Java\a.txt】,如果要写到字符串中,需要先对反斜杠进行转义,程序中需要写【C:\\Program Files\\Java\\a.txt】
相对于当前所处的位置而言的路径,不是从根节点的位置出发4.一个唯一的路径并不代表对应的文件一定存在
文章图片
路径存在,并不代表文件一定存在三、Java中的File类-----java.io.File
文章图片
File对象就是对文件的管理数据的抽象1.构造方法
File对象创建出来并不能代表文件存在
文章图片
对于这个test.txt
文章图片
import java.io.File;
/**
* @author happy
*/
public class Main {
public static void main(String[] args) {
{
File file = new File("D:\\JAVA\\java1\\project\\java-ee\\test.txt");
System.out.println(file);
// 对象存在
// 文件并不存在
}{
// 父结点,一般都是目录
File parent = new File("D:\\JAVA\\java1\\project\\java-ee");
File file = new File(parent, "test.txt");
System.out.println(file);
}{
// 父结点,一般都是目录
File file = new File("D:\\JAVA\\java1\\project\\java-ee", "test.txt");
System.out.println(file);
}
}
}
输出结果:2.File的主要方法
文章图片
点击蓝色就可以看到test.txt文件里面的内容
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
- 示例1
package thread_safe.day5_8;
import java.io.File;
import java.io.IOException;
/**
* @author happy
*/
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("D:/JAVA/java1/project/java-ee/test.txt");
// 返回此抽象路径名的绝对形式。
System.out.println(file.getAbsolutePath());
// 返回此抽象路径名的绝对路径名字符串
System.out.println(file.getCanonicalPath());
// 返回文件的长度
System.out.println(file.length());
// 返回文件的名称
System.out.println(file.getName());
// 返回父级的路径名字符串
System.out.println(file.getParent());
}
}
文章图片
- 实例2
import java.io.File;
import java.io.IOException;
/**
* @author happy
*/
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("D:/JAVA/java1/project/java-ee/test.txt");
// 返回相对路径
System.out.println(file.getCanonicalPath());
// 文件是否存在
System.out.println(file.exists());
// 返回该路径的文件是否是目录
System.out.println(file.isDirectory());
// 返回该路径的文件是否是普通文件
System.out.println(file.isFile());
System.out.println(file.canExecute());
System.out.println(file.canRead());
System.out.println(file.canWrite());
}
}
文章图片
3.新建一个普通文件
前提是路径对应的文件父目录存在,文件不存在
文章图片
import java.io.File;
import java.io.IOException;
/**
* @author happy
*/
public class Main5 {
public static void main(String[] args) throws IOException {
// 如果当前目录本身不存在,所以无法创建,以异常的形式体现
File file = new File("D:/JAVA/java1/project/java-ee/hello.txt");
// 刚开始没有该文件,返回false
System.out.println(file.exists());
file.createNewFile();
// 创建完成之后返回true
System.out.println(file.exists());
}
}
文章图片
4.新建一个目录
前提是路径对应的文件父目录存在,文件不存在,要想连同不存在的父目录一起创建,使用mkdirs()方法
文章图片
import java.io.File;
/**
* @author happy
*/
public class Main6 {
public static void main(String[] args) {
// 一级一级目录创建
//File f1 = new File("../a");
//f1.mkdir();
//File f2 = new File("../a/b");
//f2.mkdir();
//File f3 = new File("../a/b/c");
//f3.mkdir();
//File file = new File("../a/b/c/d");
//System.out.println(file.mkdir());
File file = new File("../a/b/c/d");
System.out.println(file.mkdirs());
}
}
5.删除文件/目录
只是标记要删除,真正删除的时候是在JVM进程退出的时候
Windows上的回收站只是一个特殊的目录,回收站的删除其实不是删除,只是把文件移动到对应的目录
普通文件正常删除;目录文件要求目录必须是空目录
文章图片
import java.io.File;
/**
* @author happy
*/
public class Main7 {
public static void main(String[] args) {
File file = new File("../hello.txt");
System.out.println(file.delete());
}
}
6.通过重命名的方式把一个文件移动到另一个节点
文章图片
package thread_safe.day5_8;
import java.io.File;
/**
* @author happy
*/
public class Main8 {
public static void main(String[] args) {
// 把a目录下的test.txt移动到b目录下
File src = https://www.it610.com/article/new File("../java-ee/a/test.txt");
File dest = new File("../java-ee/b/test.txt");
System.out.println(src.renameTo(dest));
}
}
文章图片
文章图片
7.给定起始目录,遍历这个目录下的所有文件
只有b目录下才有test.txt文件
文章图片
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* @author happy
*/
public class FileDemo {
static List all_file = new ArrayList<>();
private static void traversal(File dir) throws IOException {
File[] files = dir.listFiles();
// 该目录的所有孩子
if (files == null) {
return;
}for (File file : files) {
if (file.isDirectory()) {
traversal(file);
} else if (file.isFile()) {
if (file.getName().endsWith(".txt")) {
//if (file.getName().equals("test.class")) {
all_file.add(file.getCanonicalPath());
}
}
}
}public static void main(String[] args) throws IOException {
File startDir = new File("D:/JAVA/java1/project/java-ee");
traversal(startDir);
for (String path : all_file) {
System.out.println(path);
}
}
}
【Java|文件操作和IO】
推荐阅读
- Java 格式化输出日期
- java/android ?????????????????????????????????(17)
- java/android 做题中整理的碎片小贴士(16)
- JAVA|项目上传文件大小限制
- 源码|JAVA带财务进销存 ERP管理系统源码《免费分享源码》
- java/android ?????????????????????????????????(15)
- java/android 做题中整理的碎片小贴士(12)
- 【面试普通人VS高手系列】说一说Mybatis里面的缓存机制
- 又被问了(Spring Boot 定时任务开启后,怎么符合条件自动停止())