File类
基础概念
File类:
以抽象的方式代表文件名和目录路径名。
作用:
操作文件的属性:进行创建或删除文件等常用操作。
(不能操作文件内容,对于文件内容需要IO流)
注意:
- File类是在java.io包中唯一与文件本身有关的
- 创建出File类的对象并不代表该路径下有此文件或目录。
- File类的对象可以是目录或者文件。
基本操作
构造方法
File(String pathname)
通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例。(最常用)
File(File parent, String child);
通过给定的父抽象路径名和子路径名字符串创建一个新的File实例。
File(String parent, String child)
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
File(URI uri)
通过将给定的 file: URI 转换成一个抽象路径名来创建一个新的 File 实例。
注意:
- 文件路径的分割符号只能是
\\
或者/
而不能是‘\’。(对于两个\,第一个是转义符号)。 .
表示当前项目的地址
常用方法
判断
public boolean exists()
判断文件是否存在。
如果文件存在
boolean isDirectory()
//如果是目录,返回true;
boolean isFile()
//如果是文件(非目录则是文件),返回true;
注意:
如果文件不存在,上面两个方法都返回false,即不存在的File类对象既不是文件也不是目录。
创建删除
注意:不论是创建文件、创建目录还是删除文件,只有在动作真正发生的时候会返回true。
创建文件:
boolean createNewFile()
当且仅当不存在具有此抽象路径名指定名称的文件时创建一个新的空文件; 如果文件已经存在的话则返回false。
创建文件夹:
boolean mkdir()
创建此抽象路径名指定的目录。(只能创建一个文件夹,要求所有的父目录都存在,否则创建失败。)
boolean mkdirs()
创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。(注意即便最后创建失败,但是也可能创建了一些中间目录)。
上面两个方法如果要创建的目录已经存在,不再重新创建,会返回false,只有新建目录返回true。
删除:
boolean delete()
删除此抽象路径名表示的文件或目录。(非空目录则无法删除,返回false。)
如果要删除的文件不能被删除则会抛出IOException。
注意:
如果文件不存在,上面两个方法都返回false,即不存在的File类对象既不是文件也不是目录。
查询
路径相关:
String getAbsolutePath()
//从相对路径找到绝对路径 (不需要文件存在)
String getPath()
//返回相对路径
String getParent()
//返回文件的上一级文件名
文件相关:
String getName()
//返回文件名称(不包含路径)
long length()
//返回文件大小(字节数)
磁盘相关:
long getTotalSpace()
//如果是真的,则输出文件所在磁盘的容量大小
long getFreeSpace()
//如果是真的,则输出文件所在磁盘的可用容量的大小
long lastModified()
//返回此抽象路径名表示的文件最后一次被修改的时间。
测试代码
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream.GetField;
import java.io.PrintStream;
import java.util.*;
public class Main {
public static void main(String args[]) throws IOException, InterruptedException {
File file=new File("E:\\eclipse-workspace\\my\\data1");//绝对路径“/”=="\\"
System.out.println(file.exists());//文件是否存在
if(file.exists()) {
file.delete();//只能删除空文件夹/文件。
}
else {
file.mkdir();//创建
}
file =new File("src/Main.java");//相对路径 “/”=="\\"
System.out.println(file.exists());
System.out.println(file.getAbsolutePath());//从相对路径找到绝对路径(不需要文件存在)
System.out.println(file.getTotalSpace());//如果是真的,则输出文件所在磁盘的容量大小
System.out.println(file.getFreeSpace());//如果是真的,则输出文件所在磁盘的可用容量的大小
System.out.println(file.getParent());//返回文件的上一级文件名
System.out.println(file.getName());//返回文件名
System.out.println(file.getPath());//返回相对路径
System.out.println(file.lastModified());//返回此抽象路径名表示的文件最后一次被修改的时间。
System.out.println(file.length());//返回文件大小(字节数)
file=new File("abc.txt");
System.out.println(file.exists());
file.createNewFile();//创建新文件.txt
System.out.println(file.exists());
// file.deleteOnExit();//虚拟机执行结束/程序结束时候再删除文件;
}
}
File类高级应用—列出文件及目录
高级方法
long lastModified()
//返回当前 File 对象表示的文件最后修改的时间
String[] list();
//以字符串的形式返回目录中的文件和目录。
File[] listFiles()
//返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。(用于获取下一级的文件/目录的File对象)
String[] list(FilenameFilter filter)
//返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录。
FilenameFilter filter:
该方法的作用与 list() 方法相同,不同的是返回数组中仅包含符合 filter 过滤器的文件和目录,如果 filter 为 null,则接受所有名称。
String[] filenames = dir.list(new FilenameFilter() {
public boolean accept(File dir, String name) {// 匿名内部类
if (name.endsWith(filter)) {// 如果过滤器能在
return true;
} else
return false;
}
});// FilenameFilter为过滤器。
实现代码
import java.io.*;
import java.util.*;
public class Main {
// 列出一个目录下的所有文件和目录名称
public static void listDirectory(File dir) {
if (dir.isDirectory()) {// 如果是目录
String[] filenames = dir.list();// 返回目录中的文件和目录。
if (filenames != null) {// 如果目录非空
for (String filename : filenames) {
System.out.println(filename);
}
}
} else {
System.out.println("不是目录");
}
}
//列出一个目录及其子目录下的所有文件和目录名称
public static void listSubDirectory(File dir) {
if (dir.isDirectory()) {// 如果是目录
File[] listFiles = dir.listFiles();
if (listFiles != null) {// 如果目录非空
for (File file : listFiles) {// 遍历目录
if (file.isFile()) {// 如果file是文件,直接输出
System.out.println(file);
} else {// 如果不是文件递归调调用
listSubDirectory(file);
}
}
} else {
System.out.println("目录为空");
}
} else {
System.out.println("不是目录");
}
}
//列出一个目录下的所有.java文件名称
public static void listFilter(File dir, String filter) {
if (dir.isDirectory()) {// 如果是目录
String[] filenames = dir.list(new FilenameFilter() {
public boolean accept(File dir, String name) {// 匿名内部类
if (name.endsWith(filter)) {// 如果过滤器能在
return true;
} else
return false;
}
});// FilenameFilter为过滤器。
if (filenames != null) {// 如果目录非空
for (String filename : filenames) {
System.out.println(filename);
}
}
} else {
System.out.println("不是目录");
}
}
//列出一个目录其子目录下的所有.java文件名称
public static void listSubFilter(File dir, String filter) {
if (dir.isDirectory()) {// 如果是目录
File[] listFiles = dir.listFiles();
if (listFiles != null) {// 如果目录非空
for (File file : listFiles) {// 遍历目录
if (file.isFile()) {// 如果file是文件,直接输出
if (file.getName().endsWith(filter)) {
System.out.println(file);
}
} else {// 如果不是文件递归调调用
listSubDirectory(file);
}
}
} else {
System.out.println("目录为空");
}
} else {
System.out.println("不是目录");
}
}
public static void main(String args[]) throws IOException, InterruptedException {
File file = new File("D:\\5356353535");
listDirectory(file);
listSubDirectory(file);
listFilter(new File("./src"), ".java");// 当前工程的src目录
listSubFilter(new File("./src"), ".java");
}
}