File 类
操作系统中的文件->file和文件夹->dirdirectory&&路径->path与系统无关!
public class IODemo {
public static void main(String[] args) {
//File类的静态从成变量
//目录分隔符 lunix为 : 冒号 win 为 ; 分号
System.out.println("目录分割符"+ File.pathSeparator);
//与系统有关的名称分割符 向右的斜线 \ 目录的名称分割 lunix /
System.out.println("名称分割符"+File.separator);
}
}
控制台:
路径:
绝对路径:在系统中具有唯一性的 D:\Git\bin ;或者互联网中具有唯一性的 https://mp.csdn.net/postedit 这个也是绝对路径
相对路径: 路径之间的相对关系,不是唯一的;以一个目录为参照点,来去找上下目录
D:\Git\bin
Git的父目录 D 是唯一的,上一层目
Git的子目录 bin 可以有多个,下一层目录
File类的三重构造方法
package cn.bufanli.iodemo;
import java.io.File;
/**
* file类的构造方法
* 三种重载形式
*/
public class FileDemo01 {
public static void main(String[] args) {
getFileOne();
getFileTwo();
getFileThree();
}
/**
* File(String pathname)
* 将String类型路径封装成一个file类型的对象
*/
public static void getFileOne(){
File file = new File("d:\\Git\\LICENSE.txt");
System.out.println(file);
}
/**
* File(String parent,String child)
* 需要传递字符串类型的父路径,字符串类型的子路径
* 将路径封装成一个file类型的对象比上面更灵活
* 可以单独控制父路径和子路径
*/
public static void getFileTwo(){
File file = new File("d:","Git");
System.out.println(file);
}
/**
* File(File parent,String child)
* 需要传递File类型的父路径,字符串的子路径
* 父类路径是file类型,可以单独调用file的方法
*/
public static void getFileThree(){
File parent = new File("d:");
File file = new File(parent,"Git");
System.out.println(file);
}
}
控制台
File类的创建和删除功能
package cn.bufanli.iodemo;
import java.io.File;
import java.io.IOException;
/**
* File类的创建和删除功能
* 文件 或是文件夹
*/
public class FileDemo02 {
public static void main(String[] args) throws IOException {
//创建文件功能
creatFile();
//创建文件夹功能
creatFolder();
//删除文件或文件夹
deleteFolder();
}
/**
* File的创建文件功能
* 创建的路径在File的构造方法中给出
* boolean newFile = file.createNewFile();
* 只能创建文件不能创建文件夹
* 文件已存为false在不在创建
*/
public static void creatFile() throws IOException {
File file = new File("d:\\yueshu\\a.txt");
boolean newFile = file.createNewFile();
System.out.println("创建文件:"+newFile);
}
/**
* File的创建文件夹功能
* 创建的路径在File的构造方法中给出
* boolean newFile = file.mkdir(); 创建单个文件
* boolean newFile = file.mkdirs(); 创建多个文件,也可以创建单个
* 只能创建文件不能创建文件夹
* 文件夹已存为false在不在创建
*/
public static void creatFolder() throws IOException {
File file = new File("d:\\yueshu\\txt");
boolean newFile = file.mkdirs();
System.out.println("创建文件夹:"+newFile);
}
/**
* File的删除功能
* 删除的路径在File的构造方法中给出
* 文件夹已删除为true
* 删除方法不走回收站直接从硬盘删除
* 删除有风险,运行需谨慎
*/
public static void deleteFolder() throws IOException {
File file = new File("d:\\yueshu\\txt");
boolean newFile = file.delete();
System.out.println("删除:"+newFile);
}
}
运行前
运行后
控制台
File类的获取功能
package cn.bufanli.iodemo;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
/**
* File类的获取功能
*/
public class FileDemo03 {
public static void main(String[] args) {
getName();
getLength();
getAbsolute();
getParentAbsolute();
getFileList();
getRoot();
filter();
}
/**
* File类的获取功能
* String name = new File("xxx").getName();
* 返回路径中表示文件名或者文件夹名,获取路径中的最后部分的名字
*/
public static void getName(){
System.out.println(new File("d:\\yueshu\\a.txt").getName());
}
/**
* File类的获取功能
* String name = new File("xxx").getPath();
* 将file对象路径转换成一个字符串和toString()功能一样
*/
public static void getPath(){
System.out.println(new File("d:\\yueshu\\a.txt").getPath());
}
/**
* File类的获取功能
* Long length = new File("xxx").getLength();
* 拿到文件大小的字节数
*/
public static void getLength(){
System.out.println(new File("d:\\yueshu\\a.txt").length());
}
/**
* File类的获取功能
* File path = new File("xxx").getAbsoluteFile(); 返回String对象
* String path = new File("xxx").getAbsolutePath(); 返回 String对象
* 获取绝对路径
*/
public static void getAbsolute(){
System.out.println(new File("d:\\yueshu\\a.txt").getAbsoluteFile());
System.out.println(new File("d:\\yueshu\\a.txt").getAbsolutePath());
System.out.println("项目路径:"+new File("").getAbsolutePath());
}
/**
* File类的获取功能
* File path = new File("xxx").getParentFile(); 返回 File对象
* String path = new File("xxx").getParent(); 返回 String对象
* 获取父路径
*/
public static void getParentAbsolute(){
System.out.println(new File("d:\\yueshu\\a.txt").getParent());
System.out.println(new File("d:\\yueshu\\a.txt").getParentFile());
//为null
System.out.println("项目父路径:"+new File("").getParentFile());
//结合getParentFile使用
System.out.println(new File("d:\\yueshu\\a.txt").getAbsoluteFile().getParentFile());
}
/**
* File类的获取功能
* String[] list = file.list();
* File[] files = file.listFiles();
* 获取路径中的文件夹名和目录名称
*/
public static void getFileList(){
File file = new File("d:\\yueshu");
File[] files = file.listFiles();
ArrayList<File> files1 = new ArrayList<>();
for (File file1 : files) {
files1.add(file1);
}
System.out.println("file集合对象"+files1);
String[] list = file.list();
ArrayList<String> strings = new ArrayList<>();
for (int i = 0; i < list.length; i++) {
strings.add(list[i]);
}
System.out.println("String集合"+strings);
}
/**
* 文件获取的过滤器
* 遍历目录方法(重载的形式)
*/
public static void filter(){
File file = new File("D:\\nginx-1.12.2");
File[] files = file.listFiles(new FileFilter() {
/**
*
* @param pathname 集合中的每一个file对象 false会过滤掉
* @return
*/
@Override
public boolean accept(File pathname) {
System.out.println("重写的方法:"+pathname);
//endsWith 以什么结尾 true 就 存到 数组中
return pathname.getName().endsWith(".exe");
}
});
ArrayList<File> files2 = new ArrayList<>();
for (File file1 : files) {
files2.add(file1);
}
System.out.println("过滤器:"+files2);
}
/**
* 获取系统的所有根目录
*/
public static void getRoot(){
File[] files = File.listRoots();
ArrayList<File> files2 = new ArrayList<>();
for (File file : files) {
files2.add(file);
}
for (File file : files) {
File[] files1 = file.listFiles();
for (File file1 : files1) {
files2.add(file1);
}
}
System.out.println("系统"+files2);
}
}
File类的判断功能
package cn.bufanli.iodemo;
import java.io.File;
/**
* File的判断功能
*/
public class FileDemo04 {
public static void main(String[] args) {
judgeFile();
judgeFolder();
}
/**
* 判断文件是否存在
* 路径在File的构造方法中给出
* boolean exists = file.exists();
*
*/
public static void judgeFile(){
File file = new File("d:\\yueshu\\a.txt");
boolean exists = file.exists();
System.out.println(exists);
/**
* 项目中的路径
*/
File fileSrc = new File("src");
boolean existsSrc = fileSrc.exists();
System.out.println(existsSrc);
}
/**
* 判断是不是文件夹
* 路径在File的构造方法中给出
* boolean directory = file.isDirectory();
* 判断是不是文件
* boolean file = Folder.isFile();
*/
public static void judgeFolder(){
File file = new File("d:\\yueshu\\a.txt");
//判断路径是否存在
if(file.exists()){
boolean directory = file.isDirectory();
boolean file1 = file.isFile();
System.out.println(file+"是否是文件夹:"+directory);
System.out.println(file+"是否是文件:"+file1);
}else{
System.out.println("路径不存在");
}
File Folder = new File("d:\\yueshu");
if(Folder.exists()){
boolean directory2 = Folder.isDirectory();
boolean file2 = Folder.isFile();
System.out.println(Folder+"是否是文件夹:"+directory2);
System.out.println(Folder+"是否是文件:"+file2);
}else{
System.out.println("路径不存在");
}
}
}
递归调用->遍历路径下所有目录
package cn.bufanli.iodemo;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* 递归遍历路径下所有下的文件夹和文件
*/
public class FIleDemo05 {
public static ArrayList<File> files1 = new ArrayList<>();
public static void main(String[] args) {
File file = new File("C:\\eclipse");
List<File> dirAll = getDirAll(file);
System.out.println(dirAll);
}
public static List<File> getDirAll(File file) {
files1.add(file);
File[] files = file.listFiles();
for (File file1 : files) {
//如果是目录
if (!file1.isFile()) {
getDirAll(file1);
}else{
files1.add(file1);
}
}
return files1;
}
}