IO流篇(一、File)
目录
一、学习前言
二、文件简介
三、文件使用
1. 绝对路径 vs 相对路径
2. 路径分隔符
3. 属性(字段)
4. 构造方法
5. 常用方法
5.1. 获取文件的相关信息
5.2. 判断功能
5.3. 新建和删除
5.4. 文件的获取
5.5. 重命名文件
四、文件使用练习
1. 学会创建File对象定位操作系统的文件
2. File类的获取功能的API
3. File类的创建和删除的方法
4. File针对目录的遍历
5. 去D盘判断搜索某个文件
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();
}
}
}