java,File类
- File类
- 静态成员变量
- 构造方法
- 常用方法
- 用于创建、删除文件/文件夹的方法
- 用于遍历文件/文件目录的方法
- 文件过滤器方法
File类
Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。
File对象代表磁盘中实际存在的文件和目录。
静态成员变量
静态成员变量 | 描述 |
---|---|
static String pathSeparator | 路径分隔符 windows是分号; linux是冒号: |
static char pathSeparatorChar | 与系统相关的路径分隔符。 |
static String separator | 文件名称分隔符 windows是 \ 反斜杠 ; linux是正斜杠/ |
static String pathSeparator | 文件名称分隔符 |
package com.gothic.sunset.demo1;
import java.io.File;
public class DemoTestFile1 {
public static void main(String[] args) {
String pathSeparator = File.pathSeparator;
System.out.println(pathSeparator); // 路径分隔符;windows是分号; linux是冒号:
String separator = File.separator;
System.out.println(separator); // 文件名称分隔符 windows是 \反斜杠 linux是正斜杠/
}
}
构造方法
构造方法 Constructor | 描述 |
---|---|
File(File parent, String child) | 从父抽象路径名和子路径名字符串创建新的 File实例。 |
File(String pathname) | 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例 |
File(String parent, String child) | 从父路径名字符串和子路径名字符串创建新的 File实例。 |
File(URI uri) | 通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。 |
package com.gothic.sunset.demo1;
import java.io.File;
public class DemoTestFile2 {
//File相关构造类的使用
public static void main(String[] args) {
// show1(); 通过指定路径来创建file对象
show2();
}
//通过指定的路径来创建file对象
private static void show1() {
//先拿绝对路径来试试
File file1 = new File("D:\\IdeaProjects\\studyFileIo\\src\\main\\java\\com\\gothic\\sunset\\text\\a.txt");
System.out.println(file1);
//再试试相对路径----- 这里必须使用完整的绝对路径
File file2 = new File("\\text\\a.txt");
System.out.println(file2);
}
// 从父路径名字符串和子路径名字符串创建新的 File实例。
// 从父抽象路径名(File对象)和子路径名字符串创建新的 File实例。
private static void show2() {
//父路径和子路径结合获取file对象
File file1 = new File("D:\\IdeaProjects\\studyFileIo\\src\\main\\java\\com\\gothic\\sunset\\text","a.txt");
System.out.println(file1);
// 使用file对象作为父路径,再使用子路径字符串拼接
File fileParent = new File("D:\\IdeaProjects\\studyFileIo\\src\\main\\java\\com\\gothic\\sunset\\text");
System.out.println("父路径对象:"+fileParent);
File fileChild = new File(fileParent,"a.txt");
System.out.println("fileChild"+fileChild);
}
}
常用方法
返回值 方法名 参数 | 描述 |
---|---|
String getPath() | 将此File对象转换为路径名字符串。 |
String getAbsolutePath() | 返回此File对象的绝对路径名字符串。 |
String getName() | 返回由此抽象路径名表示的文件或目录的名称。 |
long length() | 返回由此File对象表示的文件的长度。 |
boolean exists() | 测试此File对象表示的文件或目录是否存在。 |
boolean isDirectory() | 测试此File对象表示的文件是否为目录 |
boolean isFile() | 测试此File对象表示的文件是否为普通文件 |
package com.gothic.sunset.demo1;
import java.io.File;
public class DemoTestFile3 {
public static void main(String[] args) {
// testMethod1();
// testMethod2();
// testMethod3();
testMethod4();
}
//File类常用方法介绍
//String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
private static void testMethod1() {
File file1 = new File("D:\\IdeaProjects\\studyFileIo\\src\\main\\java\\com\\gothic\\sunset\\text\\a.txt");
String absolutePath = file1.getAbsolutePath();
System.out.println(absolutePath);
//相对路径抽象file对象,这里因为我是在工程下,,,,,
File file2 = new File("src\\main\\java\\com\\gothic\\sunset\\text\\a.txt");
String absolutePath2 = file2.getAbsolutePath();
System.out.println(absolutePath2);
}
// String getPath() 将此抽象路径名转换为路径名字符串。 其实就是file的toString
private static void testMethod2(){
File file2 = new File("D:\\IdeaProjects\\studyFileIo\\src\\main\\java\\com\\gothic\\sunset\\text\\a.txt");
String path = file2.getPath();
System.out.println(path);
}
// String getName() 返回由此抽象路径名表示的文件或目录的名称。
private static void testMethod3(){
File file1 = new File("D:\\IdeaProjects\\studyFileIo\\src\\main\\java\\com\\gothic\\sunset\\text\\a.txt");
System.out.println(file1.getName());
}
//long length() 返回由此抽象路径名表示的文件的长度。
//如果文件不存在,则返回0
public static void testMethod4(){
File file1 = new File("D:\\IdeaProjects\\studyFileIo\\src\\main\\java\\com\\gothic\\sunset\\text\\a.txt");
long length = file1.length();
System.out.println(length);
File file2 = new File("D:\\IdeaProjects\\studyFileIo\\src\\main\\java\\com\\gothic\\sunset\\text\\鲸鱼小屋.png");
long length2 = file2.length();
System.out.println(length2);
}
}
package com.gothic.sunset.demo1;
import java.io.File;
public class DemoTestFile4 {
public static void main(String[] args) {
//判断文件是否存在以及它是文件夹还是文件
testShow();
}
//boolean exists() 测试此抽象路径名表示的文件或目录是否存在。
//boolean isDirectory() 测试此抽象路径名表示的文件是否为目录。
//boolean isFile() 测试此抽象路径名表示的文件是否为普通文件。
public static void testShow(){
File file1 = new File("D:\\IdeaProjects\\studyFileIo\\src\\main\\java\\com\\gothic\\sunset\\text\\鲸鱼小屋.png");
if (file1.exists()){
System.out.print("路径存在");
if (file1.isFile()){
System.out.print("并且它是文件");
return;
}
if (file1.isDirectory()){
System.out.print("并且它是文件夹");
return;
}
}
System.out.println("路径不存在");
}
}
用于创建、删除文件/文件夹的方法
返回值 方法名 参数 | 描述 |
---|---|
boolean createNewFile() | 当且仅当具有该名称的文件尚不存在时,创建一个由该File对象命名的新的空文件。 |
boolean mkdir() | 创建由此File对象路径名命名的目录。 创建单级文件夹 |
boolean mkdirs() | 创建由此File对象路径名命名的目录,包括任何必需但不存在的父目录。创建单级和多级文件夹 |
boolean delete() | 删除由此File对象路径名表示的文件或目录。 |
package com.gothic.sunset.demo1;
import java.io.File;
import java.io.IOException;
public class DemoTestFile5 {
public static void main(String[] args) throws IOException {
show();
}
/* 创建删除功能
*
* boolean createNewFile() 当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。
* boolean mkdir() 创建由此抽象路径名命名的目录。 创建单级文件夹
* boolean mkdirs() 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。创建单级和多级文件夹
* boolean delete() 删除由此抽象路径名表示的文件或目录。
*/
private static void show() throws IOException {
//创建一个多级文件夹
File file1 = new File("C:\\Users\\gothi\\Desktop\\aa\\新建文件夹\\新建文件夹");
System.out.println(file1.mkdirs());
//在多级文件夹的基础上,创建一个单级文件夹
File file2 = new File("C:\\Users\\gothi\\Desktop\\aa\\新建文件夹\\新建文件夹\\单级文件夹");
System.out.println(file2.mkdir());
//在单级文件夹的基础上创建一个a.txt文件
File file3 = new File("C:\\Users\\gothi\\Desktop\\aa\\新建文件夹\\新建文件夹\\单级文件夹\\a.txt");
System.out.println(file3.createNewFile());
// 删除文件
if(file3.exists()&&file3.isFile()){
boolean delete = file3.delete();
System.out.println("是否删除成功:"+delete);
}
}
}
用于遍历文件/文件目录的方法
返回值 方法名 参数 | 描述 |
---|---|
String[] list() | 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。 |
File[] listFiles() | 返回一个File类型的数组,表示由该抽象路径名表示的目录中的文件。 |
如果遍历的是一个文件或者不存在的文件夹目录 则会返回空指针异常NullPointerException
package com.gothic.sunset.demo1;
import java.io.File;
public class DemoTestFile6 {
public static void main(String[] args) {
show();
// show2();
}
// 使用 String[] list() 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。来遍历
private static void show() {
// 返回aa目录下的第一级包括的文件
File file1 = new File("C:\\Users\\gothi\\Desktop\\aa");
String[] list = file1.list();
// 断言测试
assert list != null;
for (String s : list) {
System.out.println(s);
}
// 如果遍历的是一个文件或者不存在的文件夹目录 则会返回空指针异常
// File file2 = new File("C:\\Users\\gothi\\Desktop\\aa\\b"); // NullPointerException
File file2 = new File("C:\\Users\\gothi\\Desktop\\aa\\b.txt"); // NullPointerException
String[] list2 = file2.list();
// 断言测试
assert list2 != null;
for (String s : list2) {
System.out.println(s);
}
}
// 使用 File[] listFiles() 来遍历
private static void show2() {
// 使用 File[] listFiles() 遍历的话,会将其目录下的所有文件的绝对路径返回到一个File类型的数组
File file2 = new File("C:\\Users\\gothi\\Desktop\\aa");
File[] list2 = file2.listFiles();
assert list2 != null;
for (File file : list2) {
System.out.println(file);
}
}
}
文件过滤器方法
返回值 方法名 参数 | 描述 |
---|---|
String[] list(FilenameFilter filter) | 返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录。 |
File[] listFiles(FileFilter filter) | 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。 |
File[] listFiles(FilenameFilter filter) | 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。 |
需求,找某一目录下的以.txt结尾的所有文件
1.手写的方式
package demo;
import java.io.File;
import java.util.Locale;
public class Pc {
public static void main(String[] args) {
// 文件路径
String filePath = "C:\\Users\\gothi\\Desktop\\aa";
// 创建file对象
File f = new File(filePath);
getAllFiles(f);
}
public static void getAllFiles(File file){
File[] listFiles = file.listFiles();
for (File fileItem:listFiles) {
// 文件则继续递归
if(fileItem.isDirectory()){
getAllFiles(fileItem);
}
// 如果是文件则,判断其是否是以.txt结尾的
if(fileItem.isFile()){
if (fileItem.getPath().toLowerCase().endsWith(".txt")){
System.out.println(fileItem.getPath());
}
}
}
}
}
2.使用filefilter来过滤
package demo;
import java.io.File;
import java.io.FileFilter;
import java.util.Locale;
public class Pc {
public static void main(String[] args) {
String filePath = "C:\\Users\\gothi\\Desktop\\aa";
File f = new File(filePath);
// getAllFiles(f);
getTxt(f);
}
public static void getTxt(File file){
File[] listFiles = file.listFiles(new FileFilterTest());
for (File listFile : listFiles) {
if(listFile.isDirectory()){
getTxt(listFile);
}else {
System.out.println(listFile);
}
}
}
}
// 一个内部类实现了FileFilter接口
class FileFilterTest implements FileFilter{
// 重写accept方法
@Override
public boolean accept(File pathname) {
// 如果是文件夹则继续遍历 并且过滤掉
if(pathname.isDirectory()){
return true;
}
// 如果是文件则不遍历,进行判断是否是以.txt结尾的,是的话返回true
return pathname.getPath().toLowerCase().endsWith(".txt");
}
}