使用java.io.File操作文件及文件夹
如果有兴趣了解更多相关内容,可以来我的个人网站看看: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类的常用方法:
这里只列一个表,后续内容会分类型对一些方法进行说明。
方法名称 | 说明 |
---|---|
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操作文件及文件夹相关推荐
- java:IO流(缓冲流、对象流、控制台IO、转换流、java.io.File 类 )
目录 一.IO 流的结构体系 二.缓冲流:BufferedInputStream & BufferedOutputStream 三.对象流:ObjectInputStream & Ob ...
- 利用java.io.File类实现遍历本地磁盘上指定盘符或文件夹的所有的文件
2016-11-18 这是本人的第一篇随笔博客,纠结了半天还是选择自己学的时候比较用心的一些知识点上.利用java.io.File类指定本地的文件夹进行遍历所有的文件. package org.lxm ...
- Java文件类– java.io.File
Java File class is at the center of Java IO operations. Java File类是Java IO操作的中心. Java文件类 (Java File ...
- java io 文件路径_如何从Java项目中的相对路径读取文件? java.io.File找不到指定的路径...
如何从Java项目中的相对路径读取文件? java.io.File找不到指定的路径 我有一个包含2个包的项目: ListStopWords.txt ListStopWords.txt 在包(2)中我有 ...
- Java文件File操作一:文件的创建和删除
一.简述 File 文件类,主要对文件进行相关操作.常用的File操作有:文件(夹)的创建.文件(夹)的删除,文件的读入和下载(复制)等: 二.文件(夹)的创建和删除 1.创建过程 实例: //cre ...
- java IO流(一)文件, InputStream,OutputStream,Reader,Writer
JAVA IO流(一) (一) 文件 1.概念 文件就是保存数据的地方 文件流 文件在程序中是以流的形式来操作的. java程序(内存) <--------> 文件(磁盘) 输入,输出是针 ...
- Java IO系列之字节流拷贝文件性能比较
Java IO 字节流基类 InputStream--输入流, OutPutStream--输出流, 输入流用于读,输出流用于写. 字节流默认一次只读取或输出一个字节. package jonavin ...
- java.io,PrintWriter可以用来创建一个文件并向本文文件写入数据
java.io,PrintWriter可以用来创建一个文件并向本文文件写入数据 PrintWriter(String filename); PrintWriter(File file);<!-- ...
- java io合并两个txt文件_java将多个txt文件合并成一个文件
[实例简介] [实例截图] [核心代码] package com.mingrisoft; import java.awt.BorderLayout; import java.awt.EventQueu ...
最新文章
- HDU4080 Stammering Aliens(二分 + 后缀数组)
- 经典面试题: 为啥 ConcurrentHashMap 读操作不需要加锁?
- 成功抓取douban 所有电影
- 单词拼接 ----- 深搜
- Filter在Vue,JS,JQ中的使用
- [CF]Round514
- 用HTML编写教学评估系统,在线教学质量评价系统的设计与实现
- 江苏省2021年高考成绩查询有分数吗,2021年江苏省高考成绩查询入口
- jTip定制实现博客日历
- 如果抛开 Spring,如何自己实现 AOP?面试必问!
- ad一张图纸绘制多图_你知道,为什么工程图纸都是蓝图纸,而不是白色黄色红色?...
- python小论文范文3000字_完整的论文范文3000字 [论文的名字 ]
- Android免root流量防火墙,简单小程序
- 服务器系统怎么么安装手绘板驱动,wacom数位板如何使用?wacom数位板驱动安装教程!...
- python爬虫之淘宝秒抢软件
- excel单元格下拉选项怎么设置_单元格下拉效果怎么实现?
- PDA模拟中的问题1
- Windows系统自带工具介绍
- 2023版golang面试题100道(map)
- 以太坊Geth私链环境搭建