目录
一、存储
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)技术可以再断电的情况下进行数据存储;低速存储,读写速度远低于内存
弥合速度差,针对硬盘数据的读写提出了各种各样的数据结构、算法来解决
硬盘中的数据更适合块状读取,一次性读取很多的数据,和连续读写
- 由于磁盘存储的低速性,有了缓冲区技术,为了减少硬盘的读写频次
- *** 作系统会在内存中开辟一段空间
二、文件(File)比如写入400字节的内存
1、写入100字节
2、写入100字节
3、写入100字节
4、写入100字节
为了减少硬盘的读写,让达到一定条件后统一写回硬盘(应用程序主动要求冲刷缓冲区,定时冲刷、定量冲刷等)
IO中进行flush是必要的 *** 作,否则会造成数据丢失
一种抽象的概念,表示硬盘中的数据块;
狭义上讲文件是关于硬盘中数据的抽象;
变量、对象是对内存中数据的抽象;
逻辑上讲,一个文件是由两块数据组成的,文件的元数据(管理数据)和文件内容本身
文件中的数据= 管理数据+内存数据
1.文件的分类 1.1普通文件和目录文件文件系统(FileSystem):对硬盘上的数据、文件进行直接组织和管理的一个模块
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路径存在,并不代表文件一定存在
1.构造方法File对象就是对文件的管理数据的抽象
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 = 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);
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)