package com.kj.test;
import java.io.*;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* java中IO流File类的常用方法
* 本文通过一个程序,详细解释java IO流File类的常用方法。基本上都是要熟悉掌握的方法。
*/
public class FileOperate {
/**
* 对文件/文件夹的基本操作
*/
public static void main(String[] args) throws IOException {
/**
* 对文件的增删改查
*/
// 假设随便设置一个路径
File file = new File("D:/java.txt");
// 创建文件,不存在就创建,存在的话就不创建。这是创建文件的必要步骤。
boolean newFile = file.createNewFile();
// 查询文件是否存在
if (file.exists()) {
System.out.println("文件存在");
} else {
System.out.println("文件不存在");
}
// 修改文件的名称,如果已经存在,则返回false
boolean renameTo = file.renameTo(new File("D:/java2.txt"));
if (renameTo) {
System.out.println("文件重命名为:" + file.getAbsoluteFile());
}
// 删除文件,如果存在就会被删除
boolean delete = file.delete();
if (delete) {
System.out.println("文件:" + file.getAbsolutePath() + " 被删除");
}
/**
* 对文件夹的基本操作
*/
// 任意定义一个文件夹路径
File fileDir = new File("D:/java/jsp");
// 增加文件夹,创建单层文件夹
// fileDir.mkdir();
// fileDir.mkdirs() 可以创建多层文件夹,如果存在则不会再创建
boolean mkdirs = fileDir.mkdirs();
if (mkdirs) {
System.out.println("创建文件夹" + fileDir.getAbsolutePath() + "成功");
} else {
System.out.println("文件夹已存在");
}
// 文件夹的修改名称和删除,同文件的操作基本一样,但删除时要确保文件夹为空才能删除成功
// 修改文件夹名称,默认修改最里面的子目录名称,如果要修改上级目录,则调用fileDir.getParentFile()
boolean html = fileDir.renameTo(new File("D:/java/html"));
if (html) {
Optional<String> first = Arrays.stream(fileDir.getParentFile().list()).filter(fileName -> fileName.endsWith("html")).findFirst();
System.out.println("修改文件夹名称为:" + fileDir.getParent() + File.separator + first.get());
}
boolean rename = fileDir.getParentFile().renameTo(new File("D:test"));
if (rename) {
String[] list = fileDir.getParentFile().getParentFile().list();
Optional<String> first = Arrays.stream(list).filter(fileName -> fileName.endsWith("test")).findFirst();
System.out.println("被修改的文件夹父目录名称为:" + fileDir.getParentFile().getParent() + first.get());
}
// 删除文件夹,保证文件夹里面为空
boolean delete1 = fileDir.delete();
if (delete1){
System.out.println("删除文件夹成功:"+fileDir.getName());
}
/**
* file的其他操作
*/
// 判断一个file文件是文件还是文件夹
if (file.isDirectory()){
System.out.println(file.getName() + "是文件夹");
} else if (file.isFile()){
System.out.println(file.getName() + "是个文件,文件大小:" + file.length());
}
// getName获取文件名,只获取文件名,不包括文件的路径
System.out.println("file name :"+file.getName()); // file name :java.txt
// getPath获得文件路径,包括文件名字
System.out.println("file path :" + file.getPath()); // file path :D:\java.txt
// getAbsolutePath获取文件路径包括名称
System.out.println("file getAbsolutePath: "+ file.getAbsolutePath()); // file getAbsolutePath: D:\java.txt
// listFiles列出当前目录下的文件和子目录
// getParentFile获取父文件,返回类型为File,getParent获取父目录路径,返回类型为String
String parent = file.getParentFile().toString();
String fileParent = file.getParent();
File[] files = new File(fileParent).listFiles();
for (File file1 : files){
// 打印D盘所有文件和文件夹的名称
System.out.println("D:\\ "+ file1.getName());
}
// renameTo 重命名文件或者剪切文件,在同一个目录下表示重命名,否则表示剪切,存在相同文件则不再剪切
File file1 = new File("D:test.html");
boolean newFile1 = file1.createNewFile();
boolean copy = file1.renameTo(new File("D:/test/copy.txt"));
if (copy){
System.out.println(file1 +",文件剪切成功");
}
}
}