如果有兴趣了解更多相关内容,可以来我的个人网站看看:eyes++的个人空间

一:File类的概述

java有个io包,java用于操作流的对象都在io包中,io流简单来说就是input和output流,io流主要是用来处理设备之间的数据传输,Java IO对于数据的操作都是通过流实现的。

在整个java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable。而这篇博客只会涉及到5个类中的File类。

java.io.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建查找和删除等操作。在Java中,File 类是 java.io 包中唯一代表磁盘文件本身的对象,但是File 类不能访问文件内容本身,如果需要访问文件内容本身,则需要使用输入/输出流。

java.io.File类的方法:

  • 创建一个文件/文件夹
  • 删除一个文件/文件夹
  • 获取文件/文件夹
  • 判断文件/文件夹是否存在
  • 对文件夹进行遍历
  • 获取文件大小

File类的学习主要是围绕三个单词:

  • file: 文件
  • directory: 文件夹/目录
  • path: 路径

二:File类的静态成员变量

  • static String pathSeparator :与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
  • static char pathSeparatorChar :与系统有关的路径分隔符。
  • static String separator :与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
  • static char separatorChar :与系统有关的默认名称分隔符

路径分隔符和文件分隔符在不同操作系统下是不同的,路径分隔符在Windows下是";",Linux下是":",文件名称分隔符在Windows下是"",而Linux下是"/"。

比如Windows操作系统下有这样一个路径:

C:\Windows\Help

那么在Linux下就是这样的:

C:/Windows/Help

因此经行路径相关操作时路径不能绝对化,以上面的路径为例,应该写成这种形式:

"C:" + File.separator + "Windows" + File.separator + "Help"
package base.file;
import java.io.File;public class staticVar {/*static String pathSeparator 与系统有关的路径分隔符,为了方便,它被表示为一个字符串。static char pathSeparatorChar 与系统有关的路径分隔符。static String separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。static char separatorChar 与系统有关的默认名称分隔符*/public static void main(String[] args) {String pathSeparator = File.pathSeparator;  // 路径分隔符,Windows下是";",Linux下是":"char pathSeparatorChar = File.pathSeparatorChar;String separator = File.separator;  // 文件名称分隔符,Windows下是"\",而Linux下是"/"char separatorChar = File.separatorChar;System.out.println(pathSeparator);System.out.println(pathSeparatorChar);System.out.println(separator);System.out.println(separatorChar);System.out.println("C:" + File.separator + "Windows" + File.separator + "Help");}
}

三:File类的构造方法

File 类提供了如下三种形式构造方法。

  • File(String path):如果 path 是实际存在的路径,则该 File 对象表示的是目录;如果 path 是文件名,则该 File 对象表示的是文件。
  • File(String parent, String child):parent 是路径名,name 是文件名。
  • File(File dir, String name):dir 是路径对象,name 是文件名。

三种方法的使用以及一些说明都在代码里:

package base.file;import java.io.File;public class fileStruct {// 方法一private static void show01() {/*File(String pathname) 通过将给定路径名字符串转换为抽象路径来创建一个新的File实例参数:String pathname: 字符串的路径名称路径可以是文件结尾,也可以是文件夹结尾路径可以是相对路径,也可以是绝对路径创建File对象,只是把字符串路径封装为File对象,不考虑路径的真假情况*/// 测试一个绝对路径File f1 = new File("E:\\fileTest");  // 此处需要写两个反斜杠,因为在java中一个反斜杠代表转义,两个反斜杠才是一个反斜杠的意思System.out.println(f1);  // 输出 "E:\fileTest",说明重写了Object类的toString方法// 测试一个相对路径File f2 = new File("fileTest");System.out.println(f2);  // 输出 fileTest}// 方法二private static void show02(String parent, String child) {/*File(String parent, String child) 根据parent路径名字符串和child路径名字符串创建一个新的File实例参数:把路径分成了两部分String parent: 父路径String child: 子路径好处:父路径和子路径可以单独书写,使用起来非常灵活,父路径和子路径都可以变化*/File file = new File(parent, child);System.out.println(file);}// 方法三private static void show03() {/*File(File parent, String child) 根据parent抽象路径名和child路径名字符串创建一个新的File实例参数:把路径分成了两部分File parent: 父路径String child: 子路径好处:父路径和子路径可以单独书写,使用起来非常灵活,父路径和子路径都可以变化父路径是File类型,可以使用File的方法对路径经行一些操作,再使用路径创建对象*/File parent = new File("E:\\fileTest");File file = new File(parent, "test.txt");System.out.println(file);}// 主函数public static void main(String[] args) {/*File类的构造方法*/System.out.println("----- 方法一输出 -----");show01();System.out.println("----- 方法二输出 -----");show02("E:\\fileTest", "test.txt");  // 输出"E:\fileTest\test.txt"show02("D:\\fileTest", "test.java");  // 输出"D:\fileTest\test.java"System.out.println("----- 方法三输出 -----");show03();  // 输出"E:\fileTest\test.txt"}
}

四:File类的常用方法:

这里只列一个表,后续内容会分类型对一些方法进行说明。


表 1  File类的常用方法
方法名称 说明
boolean canRead() 测试应用程序是否能从指定的文件中进行读取
boolean canWrite() 测试应用程序是否能写当前文件
boolean delete() 删除当前对象指定的文件
boolean exists() 测试当前 File 是否存在
String getAbsolutePath() 返回由该对象表示的文件的绝对路径名
String getName() 返回表示当前对象的文件名或路径名(如果是路径,则返回最后一级子路径名)
String getParent() 返回当前 File 对象所对应目录(最后一级子目录)的父目录名
boolean isAbsolute() 测试当前 File 对象表示的文件是否为一个绝对路径名。该方法消除了不同平台的差异,可以直接判断 file 对象是否为绝对路径。在 UNIX/Linux/BSD 等系统上,如果路径名开头是一条斜线/,则表明该 File 对象对应一个绝对路径;在 Windows 等系统上,如果路径开头是盘符,则说明它是一个绝对路径。
boolean isDirectory() 测试当前 File 对象表示的文件是否为一个路径
boolean isFile() 测试当前 File 对象表示的文件是否为一个“普通”文件
long lastModified() 返回当前 File 对象表示的文件最后修改的时间
long length() 返回当前 File 对象表示的文件长度
String[] list() 返回当前 File 对象指定的路径文件列表
String[] list(FilenameFilter) 返回当前 File 对象指定的目录中满足指定过滤器的文件列表
boolean mkdir() 创建一个目录,它的路径名由当前 File 对象指定
boolean mkdirs() 创建一个目录,它的路径名由当前 File 对象指定
boolean renameTo(File) 将当前 File 对象指定的文件更名为给定参数 File 指定的路径名

五:File类获取功能的方法

  • public String getAbsolutePath() : 返回此File的绝对路径名字符串
  • public String getPath() : 将此File转换为路径名字符串
  • public String getName() : 返回由此File表示的文件或者目录的名称
  • public long length() : 返回由此File表示的文件的大小,如果路径不存在,则返回0

演示代码如下:

package base.file;
import java.io.File;public class getMethod {/*值得注意的是,如果使用相对路径,那么根路径是项目的根路径,在这个项目中,根路径是code,因此test.txt的相对路径为src\base\file\fileTest\test.txt*/public static void main(String[] args) {File f = new File("src\\base\\file\\fileTest\\test.txt");System.out.println("文件绝对路径:" + f.getAbsolutePath());System.out.println("文件相对路径:" + f.getPath());System.out.println("文件名称:" + f.getName());System.out.println("文件大小:" + f.length() + "字节");File f2 = new File("src\\base\\file\\fileTest");System.out.println("目录绝对路径:" + f2.getAbsolutePath());System.out.println("目录相对路径:" + f2.getPath());System.out.println("目录名称:" + f2.getName());System.out.println("目录大小:" + f2.length());  // 文件夹没有大小概念,因此返回0}
}

六:File类判断功能的方法

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

演示代码如下:

package base.file;
import java.io.File;public class fileJudge {public static void main(String[] args) {File f1 = new File("src\\base\\file\\fileTest");  // 文件夹File f2 = new File("src\\base\\file\\fileTest\\test.txt");  // 文件File f3 = new File("src\\base\\file\\test");  // 不存在的文件夹File f4 = new File("src\\base\\file\\fileTest\\demo.txt");  // 不存在的文件System.out.println(f1.exists());  // trueSystem.out.println(f2.exists());  // trueSystem.out.println(f3.exists());  // falseSystem.out.println(f4.exists());  // falseSystem.out.println(f1.isDirectory());  // trueSystem.out.println(f2.isDirectory());  // falseSystem.out.println(f3.isDirectory());  // falseSystem.out.println(f4.isDirectory());  // falseSystem.out.println(f1.isFile());  // falseSystem.out.println(f2.isFile());  // trueSystem.out.println(f3.isFile());  // falseSystem.out.println(f4.isFile());  // false}
}

七:FIle类创建删除功能的方法

  • public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件夹
  • public boolean delete() :删除由此File表示的文件或目录
  • public boolean mkdir() :创建由此File表示的目录
  • public boolean mkdirs :创建由此File表示的目录,包括任何必需但不存在的父目录

演示代码如下:

package base.file;
import java.io.File;
import java.io.IOException;public class fileCreateOrDel {// createNewFile(),如果抛出异常,我们调用throws或trycatch捕获处理private static void show01() throws IOException {/*当且仅当具有该名称的文件尚不存在时,创建一个新的空文件夹返回值是布尔值此方法只能创建文件,不能创建文件夹创建文件的路径必须是存在的,否则抛出异常*/File f = new File("src\\base\\file\\fileTest\\new.txt");boolean b = f.createNewFile();System.out.println("b:" + b);  // true}// delete()private static void show02() throws IOException {/*该方法可以删除文件,也可以返回文件夹删除文件夹时如果文件夹有内容则不删除返回false路径不存在则返回falsedelete是直接在硬盘上删除文件/文件夹,不会经过回收站,因此需要谨慎*/File f = new File("src\\base\\file\\fileTest\\test.txt");boolean b = f.delete();System.out.println(b);  // true}// mkdir()private static void show03() throws IOException {/*创建单级空文件夹文件夹存在会返回false,并且不会创建如果用这个方法创建多级文件夹,会返回false而且不创建*/File f1 = new File("src\\base\\file\\fileTest\\new");boolean b1 = f1.mkdir();System.out.println("b1:" + b1);  // trueFile f2 = new File("src\\base\\file\\fileTest\\hhh\\aaa");boolean b2 = f1.mkdir();System.out.println("b2:" + b2);  // false}// mkdirs()private static void show04() throws IOException {/*可以创建单级空文件夹,也可以创建多级空文件夹文件夹存在会返回false,并且不会创建*/File f1 = new File("src\\base\\file\\fileTest\\new2");boolean b1 = f1.mkdirs();System.out.println("b1:" + b1);  // trueFile f2 = new File("src\\base\\file\\fileTest\\bbb\\ccc");boolean b2 = f2.mkdirs();System.out.println("b2:" + b2);  // true}// 主函数public static void main(String[] args) throws IOException {show01();show02();show03();show04();}
}

八:File类遍历目录的功能

  • public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录
  • public File[] listFiles() :返回一个File数组,表示该File目录中的所有子文件或目录

注意:

  • list方法和listFiles方法遍历的是构造方法中给出的目录
  • 如果构造方法中给出的目录的路径不存在,会抛出空指针异常
  • 如果构造方法中给出的路径不是一个目录,也会抛出空指针异常

演示代码如下:

package base.file;import java.io.File;public class fileErgodic {// public String[] list()private static void show01() {/*返回一个String数组,表示该File目录中的所有子文件或目录遍历构造方法中给出的目录,会获取当前目录中所有文件/文件夹的名称,把获取到的多个名称存储到一个String类型的数组中只会遍历当前目录,如果当前目录含有一个文件夹,不会遍历该文件夹内部*/File f = new File("src\\base\\file");String[] arr = f.list();for (String fileName : arr) {System.out.println(fileName);}}// public File[] listFiles()private static void show02() {/*返回一个File数组,表示该File目录中的所有子文件或目录遍历构造方法中给出的目录,会获取当前目录中所有文件/文件夹,把文件/文件夹封装为File对象,多个File对象存储到File数组中*/File f = new File("src\\base\\file");File[] files = f.listFiles();for (File i : files) {System.out.println(i);}}// 主函数public static void main(String[] args) {show01();System.out.println("---------------");show02();}
}

九:递归打印多级目录

代码如下:

package base.file;
import java.io.File;public class fileRecursion {public static void getAllFile(File dir) {System.out.println(dir);File[] files = dir.listFiles();for (File f : files) {if (f.isDirectory()) {getAllFile(f);} else {System.out.println(f);}}}public static void main(String[] args) {File file = new File("src\\base\\file");getAllFile(file);}
}

输出结果为:

src\base\file
src\base\file\fileCreateOrDel.java
src\base\file\fileErgodic.java
src\base\file\fileJudge.java
src\base\file\fileRecursion.java
src\base\file\fileStruct.java
src\base\file\fileTest
src\base\file\fileTest\bbb
src\base\file\fileTest\bbb\ccc
src\base\file\fileTest\new
src\base\file\fileTest\new.txt
src\base\file\fileTest\new2
src\base\file\getMethod.java
src\base\file\staticVar.java

使用java.io.File操作文件及文件夹相关推荐

  1. java:IO流(缓冲流、对象流、控制台IO、转换流、java.io.File 类 )

    目录 一.IO 流的结构体系 二.缓冲流:BufferedInputStream & BufferedOutputStream 三.对象流:ObjectInputStream & Ob ...

  2. 利用java.io.File类实现遍历本地磁盘上指定盘符或文件夹的所有的文件

    2016-11-18 这是本人的第一篇随笔博客,纠结了半天还是选择自己学的时候比较用心的一些知识点上.利用java.io.File类指定本地的文件夹进行遍历所有的文件. package org.lxm ...

  3. Java文件类– java.io.File

    Java File class is at the center of Java IO operations. Java File类是Java IO操作的中心. Java文件类 (Java File ...

  4. java io 文件路径_如何从Java项目中的相对路径读取文件? java.io.File找不到指定的路径...

    如何从Java项目中的相对路径读取文件? java.io.File找不到指定的路径 我有一个包含2个包的项目: ListStopWords.txt ListStopWords.txt 在包(2)中我有 ...

  5. Java文件File操作一:文件的创建和删除

    一.简述 File 文件类,主要对文件进行相关操作.常用的File操作有:文件(夹)的创建.文件(夹)的删除,文件的读入和下载(复制)等: 二.文件(夹)的创建和删除 1.创建过程 实例: //cre ...

  6. java IO流(一)文件, InputStream,OutputStream,Reader,Writer

    JAVA IO流(一) (一) 文件 1.概念 文件就是保存数据的地方 文件流 文件在程序中是以流的形式来操作的. java程序(内存) <--------> 文件(磁盘) 输入,输出是针 ...

  7. Java IO系列之字节流拷贝文件性能比较

    Java IO 字节流基类 InputStream--输入流, OutPutStream--输出流, 输入流用于读,输出流用于写. 字节流默认一次只读取或输出一个字节. package jonavin ...

  8. java.io,PrintWriter可以用来创建一个文件并向本文文件写入数据

    java.io,PrintWriter可以用来创建一个文件并向本文文件写入数据 PrintWriter(String filename); PrintWriter(File file);<!-- ...

  9. java io合并两个txt文件_java将多个txt文件合并成一个文件

    [实例简介] [实例截图] [核心代码] package com.mingrisoft; import java.awt.BorderLayout; import java.awt.EventQueu ...

最新文章

  1. HDU4080 Stammering Aliens(二分 + 后缀数组)
  2. 经典面试题: 为啥 ConcurrentHashMap 读操作不需要加锁?
  3. 成功抓取douban 所有电影
  4. 单词拼接 ----- 深搜
  5. Filter在Vue,JS,JQ中的使用
  6. [CF]Round514
  7. 用HTML编写教学评估系统,在线教学质量评价系统的设计与实现
  8. 江苏省2021年高考成绩查询有分数吗,2021年江苏省高考成绩查询入口
  9. jTip定制实现博客日历
  10. 如果抛开 Spring,如何自己实现 AOP?面试必问!
  11. ad一张图纸绘制多图_你知道,为什么工程图纸都是蓝图纸,而不是白色黄色红色?...
  12. python小论文范文3000字_完整的论文范文3000字 [论文的名字 ]
  13. Android免root流量防火墙,简单小程序
  14. 服务器系统怎么么安装手绘板驱动,wacom数位板如何使用?wacom数位板驱动安装教程!...
  15. python爬虫之淘宝秒抢软件
  16. excel单元格下拉选项怎么设置_单元格下拉效果怎么实现?
  17. PDA模拟中的问题1
  18. Windows系统自带工具介绍
  19. 2023版golang面试题100道(map)
  20. 以太坊Geth私链环境搭建

热门文章

  1. Foundations of Machine Learning———PAC
  2. Mac新手必看教程—轻松玩转Mac OS
  3. [NiuKe-Exercise15] A.吉姆的运算式
  4. uniapp页面路由传参
  5. laravel5 Excel Excel/CSV 文件导入导出功能
  6. 阿里妈妈广告源码示例
  7. Office2016卡顿的原因及解决方法
  8. 三方库源码学习2-Retrofit
  9. DLP投影机投影技术之成像原理与工作流程
  10. 02 windows网络安全