目录
[1. 绝对路径 vs 相对路径](#1. 绝对路径 vs 相对路径)
[2. 路径分隔符](#2. 路径分隔符)
[3. 属性(字段)](#3. 属性(字段))
[4. 构造方法](#4. 构造方法)
[5. 常用方法](#5. 常用方法)
[5.1. 获取文件的相关信息](#5.1. 获取文件的相关信息)
[5.2. 判断功能](#5.2. 判断功能)
[5.3. 新建和删除](#5.3. 新建和删除)
[5.4. 文件的获取](#5.4. 文件的获取)
[5.5. 重命名文件](#5.5. 重命名文件)
[1. 学会创建File对象定位操作系统的文件](#1. 学会创建File对象定位操作系统的文件)
[2. File类的获取功能的API](#2. File类的获取功能的API)
[3. File类的创建和删除的方法](#3. File类的创建和删除的方法)
[4. File针对目录的遍历](#4. File针对目录的遍历)
[5. 去D盘判断搜索某个文件](#5. 去D盘判断搜索某个文件)
[6. 删除非空文件夹](#6. 删除非空文件夹)
一、学习前言
之前,如果我们想要存储一些数据就是利用数组和集合容器进行存储数据,
但是这些数据都是存储于内存中,如果程序退出或断电,数据也就会随之消失,无法永久保存数据!
所以,我们要想将数据持久化,利用文件存储就是一种很好的选择,
磁盘中数据的形式就是文件,文件是数据的载体,所以,可以通过文件将数据持久化到磁盘中,永久存储数据
数据持久化
数据持久化就是指将内存中的瞬时数据保存到存储设备中,保证在电脑或手机在关闭状态,数据也不会丢失。
例如:
数据持久化到磁盘文件、XML数据文件、数据库中等
像我们以前数组或集合存储的数据其实都是瞬时数据。
什么是瞬时数据?
瞬时数据就是指那些存储在内存当中,有可能会因为程序关闭或其他原因导致内存中的数据丢失。
二、文件简介
File类是文件和目录路径名的抽象表示形式,主要用于文件和目录的创建、查找和删除等操作。
即Java中把文件或者目录(文件夹)都封装成File对象。也就是说如果我们要去操作硬盘上的文件或者目录只
要创建File这个类即可。
不过要注意的是File类只是对文件的操作类,只能对文件本身进行操作,不能对文件内容进行操作。
三、文件使用
1. 绝对路径 vs 相对路径
- 绝对路径:是一个固定的路径,从盘符开始
- 相对路径:是相对于某个位置开始
-
- main()方法中的相对路径是相对于当前工程
- 单元测试方法中的相对路径是相对于当前模块
2. 路径分隔符
- 路径中的每级目录之间用一个路径分隔符隔开
- 路径分隔符和系统有关
-
- windows 和 DOS 系统默认使用""来表示
- UNIX和URL使用"/"来表示
-
Java程序支持跨平台运行,因此路径分隔符要慎用。为了解决这个隐患,File类提供了一个常量: public static final String separator:根据操作系统,动态的提供分隔符。
File file1 = new File("F:\\wclass\\06Network\\resource\\txt\\info.txt"); File file2 = new File("F:" + File.separator + "wclass" + File.separator + "06Network" + File.separator + "resource" + File.separator + "txt" + File.separator + "info.txt"); File file3 = new File("F:\\wclass\\06Network\\resource\\txt");
代码封装到FileUtil工具类的PathSeparator方法:
public static void PathSeparator() {
System.out.println("------------------------------------PathSeparator------------------------------------");
File file1 = new File("F:\\wclass\\06Network\\resource\\txt\\info.txt");
File file2 = new File("F:" + File.separator + "wclass" + File.separator + "06Network" + File.separator + "resource" + File.separator + "txt" + File.separator + "info.txt");
File file3 = new File("F:\\wclass\\06Network\\resource\\txt");
}
3. 属性(字段)
从上图的API可以发现File中包括两种分隔符,路径分隔符和名称分隔符,而且分别还有两种形式Char型和
String型。
其中 File.pathSeparator 指的是分隔连续多个路径字符串的分隔符。
在UNIX系统上,这个字符是':' ; 在Microsoft Windows系统上是';' 。
File.separator 指的是用来分隔同一个路径字符串中的目录的分隔符。
在UNIX系统上,该字段的值为'/'; 在Microsoft Windows系统上是'\' 。
我们都知道由于不同的操作系统之间会导致分隔符的不同,所以使用它们的作用主要就是屏蔽各个平台之间的
分隔符差异。
//在Windows系统下输出
System.out.println(File.pathSeparator);// 输出;
System.out.println(File.separator);// 输出 \
//简单测试一下,调用的方法后面会讲
File file1 = new File("F:\\wclass\\06Network\\resource\\txt\\info.txt");//这里两个\\是Java中的转义字符
File file2 = new File("F:" + File.separator + "wclass" + File.separator + "06Network" + File.separator + "resource" + File.separator + "txt" + File.separator + "info.txt");
System.out.println(file1.getAbsolutePath());
System.out.println(file2.getAbsolutePath());
代码封装到FileUtil工具类的Attribute方法:
public static void Attribute(){
System.out.println("------------------------------------Attribute------------------------------------");
//在Windows系统下输出
System.out.println(File.pathSeparator);// 输出;
System.out.println(File.separator);// 输出 \
//简单测试一下,调用的方法后面会讲
File file1 = new File("F:\\wclass\\06Network\\resource\\txt\\info.txt");//这里两个\\是Java中的转义字符
File file2 = new File("F:" + File.separator + "wclass" + File.separator + "06Network" + File.separator + "resource" + File.separator + "txt" + File.separator + "info.txt");
System.out.println(file1.getAbsolutePath());
System.out.println(file2.getAbsolutePath());
}
输出的结果:
4. 构造方法
上图的构造方法使用举例如下:
public static void constructorMethod() {
System.out.println("------------------------------------ConstructorMethod------------------------------------");
//File(String parent, String child)
//从父路径名字符串和子路径名字符串创建新的File实例。
File f1 = new File("F:", "\\wclass\\06Network\\resource\\txt\\hello.txt");
System.out.println(f1); //输出 F:\wclass\06Network\resource\txt\hello.txt
//File(String pathname)
//通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。
//不用Java分隔符
File f2 = new File("F:\\wclass\\06Network\\resource\\txt\\hello.txt");
//使用Java分隔符
File f3 = new File("F:" + File.separator + "wclass" + File.separator + "06Network" + File.separator + "resource" + File.separator + "txt" + File.separator + "hello.txt");
System.out.println(f2); //输出 F:\wclass\06Network\resource\txt\hello.txt
System.out.println(f3); //输出 F:\wclass\06Network\resource\txt\hello.txt
//File(File parent, String child)
//从父抽象路径名和子路径名字符串创建新的 File实例。
File f4 = new File("F:");
File f5 = new File(f4, "\\wclass\\06Network\\resource\\txt\\hello.txt");
System.out.println(f5); //输出 D:\IO\hello.txt
}
注意:
- 一个File对象代表硬盘中实际存在的一个文件或者目录。
- 无论该路径下是否存在文件或者目录,都不影响File对象的创建。
输出结果:
5. 常用方法
5.1. 获取文件的相关信息
- String getAbsolutePath() :获取绝对路径名字符串。
- String getName():获取文件或目录的名称。
- String getPath():获取路径名字符串。
- String getParent() :获取路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
- Long lastModified():获取最后一次修改的时间(返回毫秒)。
- Long length():获取文件的长度,如果表示目录则返回值未指定。
以上方法测试的代码如下【测试以自己的电脑文件夹为准】:
/**
* 获取文件的相关信息
*/
public static void getFileInformation() {
System.out.println("------------------------------------CommonMethod01:Obtain relevant information about the file------------------------------------");
System.out.println("------------------------------------常用方法:获取文件的相关信息------------------------------------");
//路径带文件
File f1 = new File("F:\\wclass\\06Network\\resource\\txt\\hello.txt");
System.out.println("文件绝对路径:" + f1.getAbsolutePath());
System.out.println("文件名称:" + f1.getName());
System.out.println("文件路径(字符串):" + f1.getPath());
System.out.println("文件父路径:" + f1.getParent());
System.out.println("文件最后修改时间(ms):" + f1.lastModified());
System.out.println("文件长度:" + f1.length());
System.out.println("------------");
//路径不带文件,纯目录
File f2 = new File("F:\\wclass\\06Network\\resource\\txt\\");
System.out.println("目录绝对路径:" + f2.getAbsolutePath());
System.out.println("目录名称:" + f2.getName());
System.out.println("目录路径(字符串):" + f2.getPath());
System.out.println("目录父路径:" + f2.getParent());
System.out.println("目录最后修改时间(ms):" + f2.lastModified());
System.out.println("目录长度:" + f2.length());
}
运行结果:
注意:绝对路径和相对路径的区别
- 绝对路径:是一个完整的路径,以盘符开头,例如 F:\wclass\06Network\resource\txt\hello.txt。
- 相对路径:是相较于当前路径,不以盘符开头,例如 \hello.txt。
5.2. 判断功能
- Boolean isDirectory():判断此路径是否为一个目录
- Boolean isFile():判断是否为一个文件
- Boolean exists():判断文件或目录是否存在
- Boolean canExecute():判断文件是否可执行
- Boolean canRead():判断文件是否可读
- Boolean canWrite():判断文件是否可写
- Boolean isHidden():判断是否为隐藏文件
以上方法测试的代码如下:
/**
* 判断功能
*/
public static void judgingFunction() {
System.out.println("------------------------------------CommonMethod02:judging function------------------------------------");
System.out.println("------------------------------------常用方法:判断功能------------------------------------");
File f1 = new File("F:\\wclass\\06Network\\resource\\txt\\hello.txt");
//路径带文件
System.out.println("是否为目录:"+f1.isDirectory());
System.out.println("是否为文件"+f1.isFile());
System.out.println("是否存在"+f1.exists());
System.out.println("是否可执行"+f1.canExecute());
System.out.println("是否可读"+f1.canRead());
System.out.println("是否可写"+f1.canWrite());
System.out.println("是否隐藏"+f1.isHidden());
System.out.println("------------");
File f2 = new File("F:\\wclass\\06Network\\resource\\txt");
//路径不带文件,纯目录
System.out.println("是否为目录:"+f2.isDirectory());
System.out.println("是否为文件"+f2.isFile());
System.out.println("是否存在"+f2.exists());
System.out.println("是否可执行"+f2.canExecute());
System.out.println("是否可读"+f2.canRead());
System.out.println("是否可写"+f2.canWrite());
System.out.println("是否隐藏"+f2.isHidden());
}
运行结果:
5.3. 新建和删除
- Boolean createNewFile():创建文件,如果文件存在则不创建,返回false,反之返回true。
- Boolean mkdir():创建文件目录。如果此文件目录存在则不创建,如果此文件目录的上层目录不存在也不创建。
- Boolean mkdirs(): 创建文件目录。如果上层文件目录不存在也会创建。
- Boolean delete():删除的文件或目录。如果目录下有文件或目录则不会删除。
以上方法测试的代码如下:
/**
* 新建和删除
* @throws IOException
*/
public static void newAndDelete() throws IOException {
System.out.println("------------------------------------CommonMethod03:New and Delete------------------------------------");
System.out.println("------------------------------------常用方法:新建和删除------------------------------------");
//创建文件
File f1 = new File("F:\\wclass\\06Network\\resource\\txt\\hi.txt");
if (!f1.exists()) {
f1.createNewFile();
System.out.println("创建成功...");
}else{
System.out.println("创建失败...");
}
//mkdir创建文件目录,目标目录不存在,上层目录存在
File f2 = new File("F:\\wclass\\06Network\\resource\\txt\\IO01");
boolean mkdir = f2.mkdir();
if (mkdir){
System.out.println("创建目录成功...");
}else{
System.out.println("创建目录失败...");
}
//mkdirs创建文件目录,上层目录不存在存在
File f3 = new File("F:\\wclass\\06Network\\resource\\txt\\txt01");
boolean mkdirs = f3.mkdirs();
if (mkdirs){
System.out.println("创建目录成功...");
}else{
System.out.println("创建目录失败...");
}
//删除文件或目录
/*
boolean delete = f1.delete();
System.out.println(delete);
boolean delete1 = f2.delete();
System.out.println(delete1);
boolean delete2 = f3.delete();
System.out.println(delete2);
*/
}
运行结果:
5.4. 文件的获取
- String[] list():返回一个字符串数组,获取指定目录下的所有文件或者目录名称的数组。
- File[] listFiles():返回一个抽象路径名数组,获取指定目录下的所有文件或者目录的File数组。
以上方法测试的代码如下:为了方便测试我在IO目录下添加了其他目录。
/**
* 文件的获取
* @throws IOException
*/
public static void filesAcquisition() throws IOException {
System.out.println("------------------------------------CommonMethod04:Acquisition of files------------------------------------");
System.out.println("------------------------------------常用方法:文件的获取------------------------------------");
File file = new File("F:\\wclass\\06Network\\resource\\txt\\");
//list()方法
String[] list = file.list();
for (String s : list) {
System.out.println(s);
}
System.out.println("----------");
//listFiles()方法
File[] files = file.listFiles();
for (File f : files) {
System.out.println(f.toString());
}
}
运行结果:
5.5. 重命名文件
- Boolean renameTo(File dest):把文件重命名到指定路径。
注意:要使用这个方法其原文件(即TXT文件或其它文件)一定要存在,而且指定路径不能存在与重命名名字
相同的文件,否则永远返回false。
/**
* 重命名文件
* @throws IOException
*/
public static void renameFile() throws IOException {
System.out.println("------------------------------------CommonMethod05:rename file------------------------------------");
System.out.println("------------------------------------常用方法:重命名文件------------------------------------");
File file1 = new File("F:\\wclass\\06Network\\resource\\txt\\inf.txt");
File file2 = new File("F:\\wclass\\06Network\\resource\\txt\\hello.txt");
boolean renameTo = file1.renameTo(file2);
System.out.println(renameTo);
}
运行结果:
四、文件使用练习
1. 学会创建File对象定位操作系统的文件
public static void positionFile() throws IOException {
System.out.println("------------------------------------FileUseExercise01------------------------------------");
System.out.println("------------------------------------文件使用练习:学会创建File对象定位操作系统的文件------------------------------------");
// 1、创建File对象(指定了文件的路径)
// 路径写法: F:\resources\wclass.jpeg
// F:/resources/wclass.jpeg
// File.separator
// File f = new File("F:\\resources\\xueshan.jpeg");
// File f = new File("F:/resources/xueshan.jpeg");
File f = new File("D:" + File.separator+"resources"+ File.separator +"wclass.jpeg");
long size = f.length(); // 是文件的字节大小
System.out.println(size);
// 2、File创建对象,支持绝对路径 支持相对路径(重点)
File f1 = new File("D:\\resources\\beauty.jpeg"); // 绝对路径
System.out.println(f1.length());
// 相对路径:一般定位模块中的文件的。 相对到工程下!!
File f2 = new File("src/data.txt");
System.out.println(f2.length());
// 3、File创建对象 ,可以是文件也可以是文件夹
File f3 = new File("D:\\resources");
System.out.println(f3.exists()); // 判断这个路径是否存在,这个文件夹存在否
}
2. File类的获取功能的API
|---------------------------------|---------------------|
| 方法 | 描述 |
| public String getAbsolutePath() | 返回此File的绝对路径名字符串 |
| public String getPath() | 获取创建文件对象的时候用的路径 |
| public String getName() | 返回由此File表示的文件或目录的名称 |
| public long length() | 返回由此File表示的文件的长度 |
public static void getFunctionsAPI() throws IOException {
System.out.println("------------------------------------FileUseExercise02------------------------------------");
System.out.println("------------------------------------文件使用练习:File类的获取功能的API------------------------------------");
// 1.绝对路径创建一个文件对象
File f1 = new File("F:/wclass/06Network/resource/wclass.jpeg");
// a.获取它的绝对路径。
System.out.println(f1.getAbsolutePath());
// b.获取文件定义的时候使用的路径。
System.out.println(f1.getPath());
// c.获取文件的名称:带后缀。
System.out.println(f1.getName());
// d.获取文件的大小:字节个数。
System.out.println(f1.length()); // 字节大小
// e.获取文件的最后修改时间
long time = f1.lastModified();
System.out.println("最后修改时间:" + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(time));
// f、判断文件是文件还是文件夹
System.out.println(f1.isFile()); // true
System.out.println(f1.isDirectory()); // false
System.out.println("-------------------------");
File f2 = new File("File\\src\\data.txt");
// a.获取它的绝对路径。
System.out.println(f2.getAbsolutePath());
// b.获取文件定义的时候使用的路径。
System.out.println(f2.getPath());
// c.获取文件的名称:带后缀。
System.out.println(f2.getName());
// d.获取文件的大小:字节个数。
System.out.println(f2.length()); // 字节大小
// e.获取文件的最后修改时间
long time1 = f2.lastModified();
System.out.println("最后修改时间:" + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(time1));
// f、判断文件是文件还是文件夹
System.out.println(f2.isFile()); // true
System.out.println(f2.isDirectory()); // false
System.out.println(f2.exists()); // true
File file = new File("D:/");
System.out.println(file.isFile()); // false
System.out.println(file.isDirectory()); // true
System.out.println(file.exists()); // true
File file1 = new File("D:/aaa");
System.out.println(file1.isFile()); // false
System.out.println(file1.isDirectory()); // false
System.out.println(file1.exists()); // false
}
3. File类的创建和删除的方法
|---------------------------------|------------------------------------------------------|
| 方法 | 描述 |
| public boolean createNewFile(); | 当且仅当具有该名称的文件尚不存在时, 创建一个新的空文件。 (几乎不用的,因为以后文件都是自动创建的!) |
| public boolean delete(); | 删除由此File表示的文件或目录。 (只能删除空目录) |
| public boolean mkdir(); | 创建由此File表示的目录。(只能创建一级目录) |
| public boolean mkdirs(); | 可以创建多级目录(建议使用的) |
public static void FileCreateAndDelete() throws IOException {
System.out.println("------------------------------------FileUseExercise03------------------------------------");
System.out.println("------------------------------------文件使用练习:File类的创建和删除的方法------------------------------------");
File f = new File("file-io-app\\src\\data.txt");
// a.创建新文件,创建成功返回true ,反之 ,不需要这个,以后文件写出去的时候都会自动创建
System.out.println(f.createNewFile());
File f1 = new File("file-io-app\\src\\data02.txt");
System.out.println(f1.createNewFile()); // (几乎不用的,因为以后文件都是自动创建的!)
// b.mkdir创建一级目录
File f2 = new File("D:/resources/aaa");
System.out.println(f2.mkdir());
// c.mkdirs创建多级目录(重点)
File f3 = new File("D:/resources/ccc/ddd/eee/ffff");
// System.out.println(f3.mkdir());
System.out.println(f3.mkdirs()); // 支持多级创建
// d.删除文件或者空文件夹
System.out.println(f1.delete());
File f4 = new File("D:/resources/wclass.jpeg");
System.out.println(f4.delete()); // 占用一样可以删除
// 只能删除空文件夹,不能删除非空文件夹.
File f5 = new File("D:/resources/aaa");
System.out.println(f5.delete());
}
4. File针对目录的遍历
|------------------------------|---------------------------------|
| 方法 | 描述 |
| public String[] list(); | 获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回 |
| public File[] listFiles(); | 获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回 |
/**
* File针对目录的遍历
* @throws IOException
*/
public static void traversingDirectories() throws IOException {
System.out.println("------------------------------------FileUseExercise04------------------------------------");
System.out.println("------------------------------------文件使用练习:File针对目录的遍历------------------------------------");
// 1、定位一个目录
File f1 = new File("F:/wclass/06Network/resource");
String[] names = f1.list();
for (String name : names) {
System.out.println(name);
}
// 2.一级文件对象
// 获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)
File[] files = f1.listFiles();
for (File f : files) {
System.out.println(f.getAbsolutePath());
}
// 注意事项
File dir = new File("/wclass/06Network/resource/txt");
File[] files1 = dir.listFiles();
System.out.println(Arrays.toString(files1));
}
5. 去D盘判断搜索某个文件
/**
* 去D盘判断搜索某个文件
* @param dir
* @param fileName
* @throws IOException
*/
public static void searchFile(File dir,String fileName) throws IOException {
System.out.println("------------------------------------FileUseExercise05------------------------------------");
System.out.println("------------------------------------文件使用练习:去D盘判断搜索某个文件------------------------------------");
// 3、判断dir是否是目录
if(dir != null && dir.isDirectory()){
// 可以找了
// 4、提取当前目录下的一级文件对象
File[] files = dir.listFiles(); // null []
// 5、判断是否存在一级文件对象,存在才可以遍历
if(files != null && files.length > 0) {
for (File file : files) {
// 6、判断当前遍历的一级文件对象是文件 还是 目录
if(file.isFile()){
// 7、是不是咱们要找的,是把其路径输出即可
if(file.getName().contains(fileName)){
System.out.println("找到了:" + file.getAbsolutePath());
// 启动它。
try {
Runtime r = Runtime.getRuntime();
r.exec(file.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
}
}else {
// 8、是文件夹,需要继续递归寻找
searchFile(file, fileName);
}
}
}
}else {
System.out.println("对不起,当前搜索的位置不是文件夹!");
}
}
6. 删除非空文件夹
/**
* 删除文件夹,无所谓里面是否有内容,都可以删除
* @param dir
* @throws IOException
*/
public static void deleteDir(File dir) throws IOException {
System.out.println("------------------------------------FileUseExercise06------------------------------------");
System.out.println("------------------------------------文件使用练习:删除非空文件夹------------------------------------");
// 1、判断dir存在且是文件夹
if(dir != null && dir.exists() && dir.isDirectory()){
// 2、提取一级文件对象。
File[] files = dir.listFiles();
// 3、判断是否存在一级文件对象,存在则遍历全部的一级文件对象去删除
if(files != null && files.length > 0){
// 里面有内容
for (File file : files) {
// 4、判断file是文件还是文件夹,文件直接删除
if(file.isFile()){
file.delete();
}else {
// 递归删除
deleteDir(file);
}
}
}
// 删除自己
dir.delete();
}
}
五、封装成一个工具类
将以上流程封装到一个工具类 FileUti l中
package com.wclass.file;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
/**
* @projectName: File
* @ClassName FilteUtil
* @description:
* @author: W哥
* @create: 2024.11.04.10:38
* @Version 1.0
**/
public class FileUtil {
/**
* 路径分隔符
*/
public static void pathSeparator() {
System.out.println("------------------------------------PathSeparator------------------------------------");
File file1 = new File("F:\\wclass\\06Network\\resource\\txt\\info.txt");
File file2 = new File("F:" + File.separator + "wclass" + File.separator + "06Network" + File.separator + "resource" + File.separator + "txt" + File.separator + "info.txt");
File file3 = new File("F:\\wclass\\06Network\\resource\\txt");
}
/**
* 属性(字段)
*/
public static void attribute() {
System.out.println("------------------------------------Attribute------------------------------------");
//在Windows系统下输出
System.out.println(File.pathSeparator);// 输出;
System.out.println(File.separator);// 输出 \
//简单测试一下,调用的方法后面会讲
File file1 = new File("F:\\wclass\\06Network\\resource\\txt\\info.txt");//这里两个\\是Java中的转义字符
File file2 = new File("F:" + File.separator + "wclass" + File.separator + "06Network" + File.separator + "resource" + File.separator + "txt" + File.separator + "info.txt");
System.out.println(file1.getAbsolutePath());
System.out.println(file2.getAbsolutePath());
}
/**
* 构造方法
*/
public static void constructorMethod() {
System.out.println("------------------------------------ConstructorMethod------------------------------------");
//File(String parent, String child)
//从父路径名字符串和子路径名字符串创建新的File实例。
File f1 = new File("F:", "\\wclass\\06Network\\resource\\txt\\hello.txt");
System.out.println(f1); //输出 F:\wclass\06Network\resource\txt\hello.txt
//File(String pathname)
//通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。
//不用Java分隔符
File f2 = new File("F:\\wclass\\06Network\\resource\\txt\\hello.txt");
//使用Java分隔符
File f3 = new File("F:" + File.separator + "wclass" + File.separator + "06Network" + File.separator + "resource" + File.separator + "txt" + File.separator + "hello.txt");
System.out.println(f2); //输出 F:\wclass\06Network\resource\txt\hello.txt
System.out.println(f3); //输出 F:\wclass\06Network\resource\txt\hello.txt
//File(File parent, String child)
//从父抽象路径名和子路径名字符串创建新的 File实例。
File f4 = new File("F:");
File f5 = new File(f4, "\\wclass\\06Network\\resource\\txt\\hello.txt");
System.out.println(f5); //输出 D:\IO\hello.txt
}
/**
* 获取文件的相关信息
*/
public static void getFileInformation() {
System.out.println("------------------------------------CommonMethod01:Obtain relevant information about the file------------------------------------");
System.out.println("------------------------------------常用方法:获取文件的相关信息------------------------------------");
//路径带文件
File f1 = new File("F:\\wclass\\06Network\\resource\\txt\\hello.txt");
System.out.println("文件绝对路径:" + f1.getAbsolutePath());
System.out.println("文件名称:" + f1.getName());
System.out.println("文件路径(字符串):" + f1.getPath());
System.out.println("文件父路径:" + f1.getParent());
System.out.println("文件最后修改时间(ms):" + f1.lastModified());
System.out.println("文件长度:" + f1.length());
System.out.println("------------");
//路径不带文件,纯目录
File f2 = new File("F:\\wclass\\06Network\\resource\\txt\\");
System.out.println("目录绝对路径:" + f2.getAbsolutePath());
System.out.println("目录名称:" + f2.getName());
System.out.println("目录路径(字符串):" + f2.getPath());
System.out.println("目录父路径:" + f2.getParent());
System.out.println("目录最后修改时间(ms):" + f2.lastModified());
System.out.println("目录长度:" + f2.length());
}
/**
* 判断功能
*/
public static void judgingFunction() {
System.out.println("------------------------------------CommonMethod02:judging function------------------------------------");
System.out.println("------------------------------------常用方法:判断功能------------------------------------");
File f1 = new File("F:\\wclass\\06Network\\resource\\txt\\hello.txt");
//路径带文件
System.out.println("是否为目录:"+f1.isDirectory());
System.out.println("是否为文件"+f1.isFile());
System.out.println("是否存在"+f1.exists());
System.out.println("是否可执行"+f1.canExecute());
System.out.println("是否可读"+f1.canRead());
System.out.println("是否可写"+f1.canWrite());
System.out.println("是否隐藏"+f1.isHidden());
System.out.println("------------");
File f2 = new File("F:\\wclass\\06Network\\resource\\txt");
//路径不带文件,纯目录
System.out.println("是否为目录:"+f2.isDirectory());
System.out.println("是否为文件"+f2.isFile());
System.out.println("是否存在"+f2.exists());
System.out.println("是否可执行"+f2.canExecute());
System.out.println("是否可读"+f2.canRead());
System.out.println("是否可写"+f2.canWrite());
System.out.println("是否隐藏"+f2.isHidden());
}
/**
* 新建和删除
* @throws IOException
*/
public static void newAndDelete() throws IOException {
System.out.println("------------------------------------CommonMethod03:New and Delete------------------------------------");
System.out.println("------------------------------------常用方法:新建和删除------------------------------------");
//创建文件
File f1 = new File("F:\\wclass\\06Network\\resource\\txt\\hi.txt");
if (!f1.exists()) {
f1.createNewFile();
System.out.println("创建成功...");
}else{
System.out.println("创建失败...");
}
//mkdir创建文件目录,目标目录不存在,上层目录存在
File f2 = new File("F:\\wclass\\06Network\\resource\\txt\\IO01");
boolean mkdir = f2.mkdir();
if (mkdir){
System.out.println("创建目录成功...");
}else{
System.out.println("创建目录失败...");
}
//mkdirs创建文件目录,上层目录不存在存在
File f3 = new File("F:\\wclass\\06Network\\resource\\txt\\txt01");
boolean mkdirs = f3.mkdirs();
if (mkdirs){
System.out.println("创建目录成功...");
}else{
System.out.println("创建目录失败...");
}
//删除文件或目录
/*
boolean delete = f1.delete();
System.out.println(delete);
boolean delete1 = f2.delete();
System.out.println(delete1);
boolean delete2 = f3.delete();
System.out.println(delete2);
*/
}
/**
* 文件的获取
* @throws IOException
*/
public static void filesAcquisition() throws IOException {
System.out.println("------------------------------------CommonMethod04:Acquisition of files------------------------------------");
System.out.println("------------------------------------常用方法:文件的获取------------------------------------");
File file = new File("F:\\wclass\\06Network\\resource\\txt\\");
//list()方法
String[] list = file.list();
for (String s : list) {
System.out.println(s);
}
System.out.println("----------");
//listFiles()方法
File[] files = file.listFiles();
for (File f : files) {
System.out.println(f.toString());
}
}
/**
* 重命名文件
* @throws IOException
*/
public static void renameFile() throws IOException {
System.out.println("------------------------------------CommonMethod05:rename file------------------------------------");
System.out.println("------------------------------------常用方法:重命名文件------------------------------------");
File file1 = new File("F:\\wclass\\06Network\\resource\\txt\\inf.txt");
File file2 = new File("F:\\wclass\\06Network\\resource\\txt\\hello.txt");
boolean renameTo = file1.renameTo(file2);
System.out.println(renameTo);
}
/**
* 学会创建File对象定位操作系统的文件
* @throws IOException
*/
public static void positionFile() throws IOException {
System.out.println("------------------------------------FileUseExercise01------------------------------------");
System.out.println("------------------------------------文件使用练习:学会创建File对象定位操作系统的文件------------------------------------");
// 1、创建File对象(指定了文件的路径)
// 路径写法: F:\resources\wclass.jpeg
// F:/resources/wclass.jpeg
// File.separator
// File f = new File("F:\\resources\\xueshan.jpeg");
// File f = new File("F:/resources/xueshan.jpeg");
File f = new File("D:" + File.separator+"resources"+ File.separator +"wclass.jpeg");
long size = f.length(); // 是文件的字节大小
System.out.println(size);
// 2、File创建对象,支持绝对路径 支持相对路径(重点)
File f1 = new File("D:\\resources\\beauty.jpeg"); // 绝对路径
System.out.println(f1.length());
// 相对路径:一般定位模块中的文件的。 相对到工程下!!
File f2 = new File("src/data.txt");
System.out.println(f2.length());
// 3、File创建对象 ,可以是文件也可以是文件夹
File f3 = new File("D:\\resources");
System.out.println(f3.exists()); // 判断这个路径是否存在,这个文件夹存在否
}
/**
* File类的获取功能的API
* @throws IOException
*/
public static void getFunctionsAPI() throws IOException {
System.out.println("------------------------------------FileUseExercise02------------------------------------");
System.out.println("------------------------------------文件使用练习:File类的获取功能的API------------------------------------");
// 1.绝对路径创建一个文件对象
File f1 = new File("F:/wclass/06Network/resource/wclass.jpeg");
// a.获取它的绝对路径。
System.out.println(f1.getAbsolutePath());
// b.获取文件定义的时候使用的路径。
System.out.println(f1.getPath());
// c.获取文件的名称:带后缀。
System.out.println(f1.getName());
// d.获取文件的大小:字节个数。
System.out.println(f1.length()); // 字节大小
// e.获取文件的最后修改时间
long time = f1.lastModified();
System.out.println("最后修改时间:" + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(time));
// f、判断文件是文件还是文件夹
System.out.println(f1.isFile()); // true
System.out.println(f1.isDirectory()); // false
System.out.println("-------------------------");
File f2 = new File("File\\src\\data.txt");
// a.获取它的绝对路径。
System.out.println(f2.getAbsolutePath());
// b.获取文件定义的时候使用的路径。
System.out.println(f2.getPath());
// c.获取文件的名称:带后缀。
System.out.println(f2.getName());
// d.获取文件的大小:字节个数。
System.out.println(f2.length()); // 字节大小
// e.获取文件的最后修改时间
long time1 = f2.lastModified();
System.out.println("最后修改时间:" + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(time1));
// f、判断文件是文件还是文件夹
System.out.println(f2.isFile()); // true
System.out.println(f2.isDirectory()); // false
System.out.println(f2.exists()); // true
File file = new File("D:/");
System.out.println(file.isFile()); // false
System.out.println(file.isDirectory()); // true
System.out.println(file.exists()); // true
File file1 = new File("D:/aaa");
System.out.println(file1.isFile()); // false
System.out.println(file1.isDirectory()); // false
System.out.println(file1.exists()); // false
}
/**
* File类的创建和删除的方法
* @throws IOException
*/
public static void FileCreateAndDelete() throws IOException {
System.out.println("------------------------------------FileUseExercise03------------------------------------");
System.out.println("------------------------------------文件使用练习:File类的创建和删除的方法------------------------------------");
File f = new File("File\\src\\data.txt");
// a.创建新文件,创建成功返回true ,反之 ,不需要这个,以后文件写出去的时候都会自动创建
System.out.println(f.createNewFile());
File f1 = new File("File\\src\\data02.txt");
System.out.println(f1.createNewFile()); // (几乎不用的,因为以后文件都是自动创建的!)
// b.mkdir创建一级目录
File f2 = new File("F:/wclass/06Network/resource/aaa");
System.out.println(f2.mkdir());
// c.mkdirs创建多级目录(重点)
File f3 = new File("F:/wclass/06Network/resource/ccc/ddd/eee/ffff");
// System.out.println(f3.mkdir());
System.out.println(f3.mkdirs()); // 支持多级创建
// d.删除文件或者空文件夹
System.out.println(f1.delete());
File f4 = new File("F:/wclass/06Network/resource/wclass.jpeg");
System.out.println(f4.delete()); // 占用一样可以删除
// 只能删除空文件夹,不能删除非空文件夹.
File f5 = new File("F:/wclass/06Network/resource/aaa");
System.out.println(f5.delete());
}
/**
* File针对目录的遍历
* @throws IOException
*/
public static void traversingDirectories() throws IOException {
System.out.println("------------------------------------FileUseExercise04------------------------------------");
System.out.println("------------------------------------文件使用练习:File针对目录的遍历------------------------------------");
// 1、定位一个目录
File f1 = new File("F:/wclass/06Network/resource");
String[] names = f1.list();
for (String name : names) {
System.out.println(name);
}
// 2.一级文件对象
// 获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)
File[] files = f1.listFiles();
for (File f : files) {
System.out.println(f.getAbsolutePath());
}
// 注意事项
File dir = new File("/wclass/06Network/resource/txt");
File[] files1 = dir.listFiles();
System.out.println(Arrays.toString(files1));
}
/**
* 去D盘判断搜索某个文件
* @param dir
* @param fileName
* @throws IOException
*/
public static void searchFile(File dir,String fileName) throws IOException {
System.out.println("------------------------------------FileUseExercise05------------------------------------");
System.out.println("------------------------------------文件使用练习:去D盘判断搜索某个文件------------------------------------");
// 3、判断dir是否是目录
if(dir != null && dir.isDirectory()){
// 可以找了
// 4、提取当前目录下的一级文件对象
File[] files = dir.listFiles(); // null []
// 5、判断是否存在一级文件对象,存在才可以遍历
if(files != null && files.length > 0) {
for (File file : files) {
// 6、判断当前遍历的一级文件对象是文件 还是 目录
if(file.isFile()){
// 7、是不是咱们要找的,是把其路径输出即可
if(file.getName().contains(fileName)){
System.out.println("找到了:" + file.getAbsolutePath());
// 启动它。
try {
Runtime r = Runtime.getRuntime();
r.exec(file.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
}
}else {
// 8、是文件夹,需要继续递归寻找
searchFile(file, fileName);
}
}
}
}else {
System.out.println("对不起,当前搜索的位置不是文件夹!");
}
}
/**
* 删除文件夹,无所谓里面是否有内容,都可以删除
* @param dir
* @throws IOException
*/
public static void deleteDir(File dir) throws IOException {
System.out.println("------------------------------------FileUseExercise06------------------------------------");
System.out.println("------------------------------------文件使用练习:删除非空文件夹------------------------------------");
// 1、判断dir存在且是文件夹
if(dir != null && dir.exists() && dir.isDirectory()){
// 2、提取一级文件对象。
File[] files = dir.listFiles();
// 3、判断是否存在一级文件对象,存在则遍历全部的一级文件对象去删除
if(files != null && files.length > 0){
// 里面有内容
for (File file : files) {
// 4、判断file是文件还是文件夹,文件直接删除
if(file.isFile()){
file.delete();
}else {
// 递归删除
deleteDir(file);
}
}
}
// 删除自己
dir.delete();
}
}
}