当前位置: 首页 > news >正文

File类

概述:

java.io.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。

注意:File类是一个与系统无关的类,任何的操作系统都可以使用这个类中的方法。

重点:file:文件;directory:文件夹/目录;path:路径

File类的四个静态成员变量(查看API文档):

字段摘要
static StringpathSeparator
          与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
static charpathSeparatorChar
          与系统有关的路径分隔符。
static Stringseparator
          与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
static charseparatorChar
          与系统有关的默认名称分隔符。

File.pathSeparator:路径分隔符(是一个分号,大家可以回忆配置环境变量的时候,两个path之间的分隔符就是一个分号,注意windows系统的是分号,Linux系统是冒号)

File.separator:文件名称分隔符(反斜杠,windows系统是反斜杠,Linux系统是正斜杠)

操作路径的时候尽量不要写死,布置在服务器上时未知系统,死路径容易报错。

如windows系统下的路径C:\\Users\\Desktop,写成"C:" + File.separator + "Users" + File.separator + "Desktop"就不会有错。

另外两个静态成员变量是字符串对应的char型。

 

路径:

绝对路径:是一个完整的路径,以盘符(C:D:)开始的路径,如C:\\Users\\Desktop

相对路径:是一个简化的路径,相对指的是相对于当前项目的根目录D:\\WorkSspace\\IdeaProjects,如存在D:\\WorkSspace\\IdeaProjects\\1.txt,可以简写为1.txt(可以省略项目的根目录)

注意事项:

1.路径不区分大小写

2.路径中的文件名称分隔符windows使用反斜杠,反斜杠是转义字符,两个反斜杠代表一个普通的反斜杠。

 

构造方法:

public File(String pathname):通过将给定的路径名字符串转换为抽象路径来创建新的File实例。

// public File(String pathname)
// 通过将给定的路径名字符串转换为抽象路径来创建新的File实例。
// 参数:pathname路径名称,可以是以文件结尾也可以是以文件夹结尾;
// 路径可以是绝对路径也可以是相对路径
// 路径可以存在,也可以是不存在
// 创建File对象,只是把字符串路径封装为File对象,不考虑路径的真假情况
File file1 = new File("D:\\WorkSpace\\IdeaProjects\\basic-code\\day04-code\\a.txt"); // 不存在的路径
System.out.println(file1); // 重写了toString方法,打印了路径

public File(String parent,String child):从父路径名字符串子路径名字符串创建新的File实例。

    show02("c:\\","b.txt"); 
private static void show02(String parent,String child) {
    // public File(String parent,String child)
    // 从父路径名字符串和子路径名字符串创建新的File实例。
    /*
        参数:把路径分成了两部分:parent父路径,child子路径
        好处:父路径和子路径可以单独的书写,使用起来非常灵活,父路径和子路径都可以变化
     */
    File file = new File(parent,child);
    System.out.println(file);  c:\b.txt
}

public File(File parent,String child):从父抽象路径名和子路径名字符串创建新的File实例。(不常用)

注意路径可以存在,也可以不存在,创建File对象,只是把字符串路径封装为File对象,不考虑路径的真假情况。

常用方法:

获取功能的方法:

public String getAbsolutePath():返回此File的绝对路径名字符串

// public String getAbsolutePath():返回此File的绝对路径名字符串
// 获取的是构造方法中传递的路径,无论传递的是相对还是绝对路径,此方法get的都是绝对路径
File file1 = new File("D:\\WorkSpace\\IdeaProjects\\basic-code\\day04-code"); // 绝对路径
File file2 = new File("demo11"); // 相对路径
System.out.println(file1.getAbsolutePath()); // D:\WorkSpace\IdeaProjects\basic-code
System.out.println(file2.getAbsolutePath()); // D:\WorkSpace\IdeaProjects\basic-code\demo11

public String getPath():将此File转换为路径名字符串

// public String getPath():将此File转换为路径名字符串
// 获取的是构造方法中传递的路径,传递的是相对就获取相对,是绝对就获取绝对
File file1 = new File("D:\\WorkSpace\\IdeaProjects\\basic-code\\day04-code"); // 绝对路径
File file2 = new File("demo11"); // 相对路径
System.out.println(file1.getPath()); // D:\WorkSpace\IdeaProjects\basic-code
System.out.println(file2.getPath()); // demo11

public String getName():返回由此File表示的文件或目录的名称

// public String getName():返回由此File表示的文件或目录的名称
File file1 = new File("D:\\WorkSpace\\IdeaProjects\\basic-code\\day04-code"); // 文件夹
File file2 = new File("D:\\a.txt"); // 文件
System.out.println(file1.getName()); // day04-code
System.out.println(file2.getName()); // a.txt

public long length():返回由此File表示的文件的大小

获取的是构造方法指定的文件的大小,以字节为单位

注意:

1.文件夹是没有大小概念的,不能获取文件夹大小;

2.如果构造方法中给出的路径不存在,那么length给出的大小为0。

File file1 = new File("D:\\WorkSpace\\IdeaProjects\\basic-code\\day04-code"); // 文件夹
File file2 = new File("D:\\a.txt"); // 文件
System.out.println(file1.getName()); // day04-code
System.out.println(file2.getName()); // 194

对应文件大小截图:

判断功能的方法:

public boolean exists():此File表示的文件或目录是否实际存在。

/*public boolean exists():此File表示的文件或目录是否实际存在。
  用于判断构造方法中的路径是否存在
  存在返回true,不存在返回false*/
File file1 = new File("D:\\WorkSpace\\IdeaProjects\\basic-code"); // 绝对路径,存在
File file2 = new File("D:\\WorkSpace\\IdeaProjects\\basic-code\\1.txt"); // 绝对路径,不存在
File file3 = new File("day04-code"); // 相对路径,存在
File file4 = new File("1.txt"); // 相对路径,不存在
System.out.println(file1.exists()); // true
System.out.println(file2.exists()); // false
System.out.println(file3.exists()); // true
System.out.println(file4.exists()); // false

public boolean isDirectory():此File表示的是否为目录。

public boollean isFile():此File表示的是否为文件。

注意:电脑的硬盘中只有文件/文件夹,两个方法是互斥

这两个方法使用前提,路径必须是存在的,否则都返回false。

// public boolean isDirectory():此File表示的是否为目录。
// public boollean isFile():此File表示的是否为文件。
File file1 = new File("D:\\WorkSpace\\IdeaProjects\\basic-code"); // 绝对路径,存在,文件夹
File file2 = new File("D:\\WorkSpace\\IdeaProjects\\basic-code\\day04-code\\day04-code.iml"); // 绝对路径,存在,文件
File file3 = new File("day04-code"); // 相对路径,文件夹
File file4 = new File("day04-code\\day04-code.iml"); // 相对路径,文件
File file5 = new File("D:\\WorkSpace\\xx"); // 绝对路径不存在的文件夹
File file6 = new File("D:\\WorkSpace\\xx.txt"); // 绝对路径不存在的文件
File file7 = new File("xx"); // 相对路径不存在的文件夹
File file8 = new File("xx.txt"); // 相对路径不存在的文件
System.out.println(file1.isDirectory()); // true,绝对路径存在的文件夹
System.out.println(file2.isDirectory()); // false,绝对路径存在的文件
System.out.println(file3.isFile()); // false,相对路径存在的文件夹
System.out.println(file4.isFile()); // true,相对路径存在的文件
System.out.println(file5.isDirectory()); // false,绝对路径不存在的文件夹
System.out.println(file6.isFile()); // false,绝对路径不存在的文件夹
System.out.println(file7.isDirectory()); // false,相对路径不存在的文件夹
System.out.println(file8.isFile()); // false,相对路径不存在的文件夹

创建与删除功能的方法:

public boolean creatNewFile():当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。

注意:

1.此方法只能创建文件,不能创建文件夹

2.创建文件的路径必须存在,否则会抛出异常

// public boolean creatNewFile():当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
// 创建文件的路径和名称在构造方法中给出(构造方法的参数)
// 返回值是boolean值,当文件不存在会创建文件返回true,当文件已存在返回false。
File file = new File("D:\\a.txt");
try { // 该文件前的路径如果不存在或路径拒绝访问,就会抛出异常,所以需要try-catch捕捉异常或throws声明异常给调用者JVM处理
    System.out.println(file.createNewFile()); // true
} catch (IOException e) {
    e.printStackTrace();
}

public boolean delete():删除由此File表示的文件或目录。

注意:delete方法是直接在硬盘上删除文件/文件夹,不走回收站,删除要谨慎。

// public boolean delete():删除由此File表示的文件或目录。
// 已存在的文件/文件夹删除返回true,不存在的文件/文件夹返回false,文件夹中有内容,不会删除返回false
File file = new File("D:\\a.txt"); // 文件
System.out.println(file.delete()); // 第一次true,第二次false
File file1 = new File("D:\\a"); // 文件夹
System.out.println(file1.delete()); // 第一次true,第二次false
File file2 = new File("D:\\c"); // 文件夹,里面有内容
System.out.println(file2.delete()); // false

public boolean mkdir():创建由此File表示的目录。(单级空文件夹)

public boolean mkdirs():创建由此File表示的目录,包括任何必需但不存在的父目录。(多级空文件夹)

注意事项:创建文件夹的路径和名称在构造方法中给出。创建文件夹时已存在的文件夹两个方法都返回false。创建单级文件夹时,路径不存在也返回false,创建多级不会

// public boolean mkdir():创建由此File表示的目录。(单级空文件夹)
// public boolean mkdirs():创建由此File表示的目录,包括任何必需但不存在的父目录。(多级空文件夹)
File file1 = new File("D:\\a"); // 单级
System.out.println(file1.mkdir()); // 第一次true,第二次false
File file2 = new File("D:\\b\\c\\d"); // 多级
System.out.println(file2.mkdir()); // false,路径不存在
System.out.println(file2.mkdirs()); // 多级,第一次true,第二次false

目录的遍历:

public String[] list():返回一个String数组,表示该File目录中所有的子文件或目录。(目录下的文件/文件夹名称)

注意:list()方法和listFiles()方法遍历的是构造方法中给出的目录。如果构造方法中给出的目录路径不存在,会抛出空指针异常;如果构造方法中给出的路径不是目录,也会抛出空指针异常。

文件夹下的隐藏文件/文件夹名称也能获取。

/*
public String[] list():返回一个String数组,表示该File目录中所有的子文件或目录。
遍历构造方法中给出的目录,会获取目录中所有文件/文件夹的名称,把获取到的多个名称存储到一个String类型的数组中
 */
File file1 = new File("D:\\WorkSpace"); // 文件夹
File file2 = new File("D:\\01.xlsx"); // 非文件夹,文件,无法输出数组,抛出空指针异常
File file3 = new File("D:\\aaaa"); // 路径不存在,抛出空指针异常
String[] arr = file1.list();
for (String name : arr) {
    System.out.println(name);
}
/*String[] arr2 = file2.list();
for (String name : arr2) {
    System.out.println(name); // NullPointerException
}
String[] arr3 = file3.list();
for (String name : arr3) {
    System.out.println(name); // NullPointerException
}*/

运行截图:

public File[] listFiles():返回一个File数组,表示该File目录中的所有的子文件或目录。(目录下的文件/文件夹路径)

/*
public File[] listFiles():返回一个File数组,表示该File目录中的所有的子文件或目录。
 */
File file1 = new File("D:\\WorkSpace"); // 文件夹
File file2 = new File("D:\\01.xlsx"); // 非文件夹,文件,无法输出数组,抛出空指针异常
File file3 = new File("D:\\aaaa"); // 路径不存在,抛出空指针异常
File[] arr = file1.listFiles();
for (File file : arr) {
    System.out.println(file.toString()); // 打印的是路径
}
/*File[] arr2 = file2.listFiles();
for (File file : arr2) {
    System.out.println(file.toString()); // NullPointerException
}
File[] arr3 = file3.listFiles();
for (File file : arr2) {
    System.out.println(file.toString()); // NullPointerException
}*/

运行截图:

 

 

 

 

相关文章:

  • 递归(斐波那契数列、类加、累乘、打印多级目录)
  • FileFilter过滤器
  • LeetCode两数之和
  • 稀疏数组
  • 队列
  • 单链表LinkedList的增删改查
  • 双向链表和环形链表(单向和双向)约瑟夫环实例
  • IO流概述+字节输出流
  • 字节输入流
  • 字符流(字符输入流和字符输出流)
  • IO异常的处理
  • 栈Stack(数组模拟、单链表模拟)
  • 属性集合Properties
  • 缓冲流
  • 转换流InputStreamReader类和OutputStreamWriter(字符编码和字符集)
  • [case10]使用RSQL实现端到端的动态查询
  • Android 控件背景颜色处理
  • angular2 简述
  • ECS应用管理最佳实践
  • JDK 6和JDK 7中的substring()方法
  • k8s 面向应用开发者的基础命令
  • Lucene解析 - 基本概念
  • PaddlePaddle-GitHub的正确打开姿势
  • React+TypeScript入门
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Vim Clutch | 面向脚踏板编程……
  • webpack入门学习手记(二)
  • 大型网站性能监测、分析与优化常见问题QA
  • 二维平面内的碰撞检测【一】
  • 分类模型——Logistics Regression
  • 将回调地狱按在地上摩擦的Promise
  • 理清楚Vue的结构
  • 两列自适应布局方案整理
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 探索 JS 中的模块化
  • 详解移动APP与web APP的区别
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 06-01 点餐小程序前台界面搭建
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #define、const、typedef的差别
  • #每日一题合集#牛客JZ23-JZ33
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .Net程序帮助文档制作
  • .net反编译工具
  • .Net语言中的StringBuilder:入门到精通
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • /boot 内存空间不够