File类
- File类用来操作文件路径或文件夹路径,将文件和文件夹路径封装成对象,以提供更多的方法和属性来操作这些对象
- File类不属于流对象,不能读写文件,但是可以作为参数传递给流对象的构造方法
File类中的静态常量
- static String
pathSeparator
与系统相关的路径分隔符字符,为方便起见,表示为字符串分号;
- static char
pathSeparatorChar
与系统相关的路径分隔符;
- static String
separator
与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串\
- static char
separatorChar
与系统相关的默认名称分隔符\
public class MyTest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
System.err.println(File.pathSeparator);
System.err.println(File.pathSeparatorChar);
System.err.println(File.separator);
System.err.println(File.separatorChar);
}
}
输出结果:
;
;
\
\
构造方法
File(File parent, String child)
:传入一个父级路径和子级路径
File(String pathname)
:将一个字符串路径封装成File对象
File(String parent, String child)
:从父路径名字符串和子路径名字符串创建新的 File实例。
File(URI uri)
:通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。
public class MyTest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//File(String pathname) :将指定的路径名转换成一个File对象
File f1 = new File("D:\\新建文件夹\\科幻小说.txt");
////File(String parent, String child) : 根据指定的父路径和文件路径创建File对象
File f2 = new File("D:\\新建文件夹\\科幻小说.txt");
//File(File parent, String child) :根据指定的父路径对象和文件路径创建File对象
//方式一
File f3 = new File("D:\\新建文件夹");
File f31 = new File(f3,"科幻小说.txt");
//方式二
File f4 = new File(new File("D:\\新建文件夹"),"科幻小说.txt");
}
}
File类创建和删除功能
boolean createNewFile()
:指定路径不存在该文件时时创建文件,返回true,否则返回false
boolean mkdir()
:当指定的单级文件夹不存在时创建文件夹并返回true,否则返回false
boolean mkdirs()
:当指定的多级文件夹某一级文件夹不存在时,创建多级文件夹并返回true,否则返回false
boolean delete()
:删除文件或者删除单级文件夹(文件夹必须为空才能删除)
/*
* 创建功能
* boolean createNewFile()
* boolean mkdir()
* boolean mkdirs()
* 删除功能
* boolean delete()
*
* 绝对路径:固定不可改变的路径,以盘符开头
* 相对路径:相对某个参照物,不能以盘符开头
* 在eclipse中相对路径相对应当前项目的根目录
*
*
* 注意:删除一个文件夹,这个文件夹下面不能有其他的文件和文件夹
*/
public class FileDemo2 {
public static void main(String[] args) throws IOException {
File f = new File("d:\\a\\b.txt");//绝对路径
File f2 = new File("a.txt");//相对路径
//boolean createNewFile() : 当指定文件不存在时创建文件并返回true,否则返回false
System.out.println(f2.createNewFile());
//boolean mkdir() : 当指定文件夹不存在时创建文件夹并返回true,否则返回false
File f3 = new File("b");
System.out.println(f3.mkdir());
//boolean mkdirs() : 创建指定文件夹,当文件夹所在的目录不存在,则顺道一块创建了
File f4 = new File("c\\d\\e");
System.out.println(f4.mkdir());
System.out.println(f4.mkdirs());
File f5 = new File("c.txt");
System.out.println(f5.mkdir());
//boolean delete() :当指定的文件或文件夹存在时删除文件或者文件夹 并返回true,否则返回false
System.out.println(f2.delete());
System.out.println(f3.delete());
File f6 = new File("c");
System.out.println(f6.delete());
}
}
File 类的判断功能
boolean exists()
: 判断指定路径的文件或文件夹是否存在
boolean isAbsolute()
: 判断当前路路径是否是绝对路径
boolean isDirectory()
: 判断当前的目录是否存在
boolean isFile()
: 判断当前路径是否是一个文件
boolean isHidden()
: 判断当前路径是否是隐藏文件
/*
* 判断功能
* boolean exists()
* boolean isAbsolute()
* boolean isDirectory()
boolean isFile()
boolean isHidden()
*/
public class FileDemo3 {
public static void main(String[] args) throws IOException {
//method();
//method2();
//method3();
method4();
}
private static void method4() {
File f = new File("d:\\a\\b.txt");
//boolean isHidden() :判断File对象指向的路径是否有隐藏属性,如果隐藏了则返回true,否则返回false
System.out.println(f.isHidden());
}
private static void method3() {
File f = new File("a.txt");
File f2 = new File("b");
//boolean isDirectory() :判断File对象指向的路径是否是文件夹,如果是则返回true,否则返回false
//boolean isFile() : 判断File对象指向的路径是否是文件,如果是则返回true,否则返回false
//System.out.println(f.isDirectory());
//System.out.println(f2.isDirectory());
System.out.println(f.isFile());
System.out.println(f2.isFile());
}
private static void method2() {
//File f = new File("a.txt");
File f2 = new File("d:\\a\b.txt");
//boolean isAbsolute() :判断File对象指向的路径是否是绝对路径,如果是绝对路径则返回true,否则返回false
System.out.println(f2.isAbsolute());
}
private static void method() {
File f = new File("a.txt");
//f.createNewFile();
//boolean exists() : 判断文件或者文件夹是否存在,如果存在则返回true,否则返回false
System.out.println(f.exists());
}
}
File 类的获取功能和修改名字功能
File getAbsoluteFile()
:获取文件的绝对路径,返回File对象
String getAbsolutePath()
:获取文件的绝对路径,返回路径的字符串
String getParent()
:获取当前路径的父级路径,以字符串形式返回该父级路径
File getParentFile()
:获取当前路径的父级路径,以字File对象形式返回该父级路径
String getName()
:获取文件或文件夹的名称
String getPath()
:获取File对象中封装的路径
long lastModified()
:以毫秒值返回最后修改时间
long length()
:返回文件的字节数
boolean renameTo(File dest)
: 将当前File对象所指向的路径 修改为 指定File所指向的路径
/*
* 获取功能
File getAbsoluteFile()
* String getAbsolutePath()
* String getParent()
* File getParentFile()
* String getName()
* String getPath()
long lastModified()
long length()
修改功能:
boolean renameTo(File dest)
*/
public class MyTest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
File f = new File("d:/a/b");//创建文件夹
f.mkdirs();
File f2 = new File(f,"c.txt");//在文件夹下创建c.txt文件
f2.createNewFile();
//File getAbsoluteFile():获取文件的绝对路径,返回File对象
File absoluteFile = f2.getAbsoluteFile();
System.err.println(absoluteFile);//输出:d:\a\b\c.txt
//String getAbsolutePath():获取文件的绝对路径,返回路径的字符串
String absolutePath = f2.getAbsolutePath();
System.err.println(absolutePath);//输出:d:\a\b\c.txt
//String getParent():获取当前路径的父级路径,以字符串形式返回该父级路径
String parent = f2.getParent();
System.err.println(parent);//输出:d:\a\b
//File getParentFile():获取当前路径的父级路径,以字File对象形式返回该父级路径
File parentFile = f2.getParentFile();
System.err.println(parentFile);//输出:d:\a\b
//String getName():获取文件或文件夹的名称
String name = f2.getName();
System.err.println(name);//输出:c.txt
//String getPath():获取File对象中封装的路径
String path = f2.getPath();
System.err.println(path);//输出:d:\a\b\c.txt
//long lastModified():以毫秒值返回最后修改时间
long lastModified = f2.lastModified();
Date date = new Date(lastModified);
System.err.println(date.toLocaleString());//输出:2018-5-14 16:49:18
//long length():返回文件的字节数
long length = f2.length();
System.err.println(length);//输出:0
File fnew = new File("cv.txt");
boolean renameTo = f2.renameTo(fnew);
System.err.println(renameTo);//输出:true
}
}
File 类的其他获取功能
String[] list()
:以字符串数组的形式返回当前路径下所有的文件和文件夹的名称
File[] listFiles()
:以File对象的形式返回当前路径下所有的文件和文件夹的名称
static File[] listRoots()
:获取计算机中所有的盘符
public class MyTest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
File f = new File("d:/a/b");//创建文件夹
f.mkdirs();
File f2 = new File(f,"c.txt");//在文件夹下创建c.txt文件
f2.createNewFile();
//static File[] listRoots() : 返回的是所有盘符
File[] listRoots = File.listRoots();
for (File file : listRoots) {
System.err.println(file);
}
/*
C:\
D:\
E:\
*/
//File对象必须是封装的文件夹路径 否则会报空指针异常
String[] list = f.list();
for (String string : list) {
System.err.println(string);
}
/*
c.txt
h.txt
y.txt
新建文件夹
新建文件夹 (2)
*/
//File[] listFiles():以File对象的形式返回当前路径下所有的文件和文件夹的名称
//File对象必须是封装的文件夹路径 否则会报空指针异常
File[] listFiles = f.listFiles();
for (File file : listFiles) {
System.err.println(file);
}
/*
d:\a\b\c.txt
d:\a\b\h.txt
d:\a\b\y.txt
d:\a\b\新建文件夹
d:\a\b\新建文件夹 (2)
*/
}
}
案例代码一
输出制定目录下所有的java文件名(包含子目录)
public class MyTest {
public static void main(String[] args) {
File f = new File("src");
method2(f);
}
/**
* 输出制定目录下所有的java文件名(包含子目录)
*/
public static void method(File file){
//判断是否是文件夹,是就遍历得到文件夹里所有的File的所有对象
if(file.isDirectory()){
File[] files = file.listFiles();
for (File f : files) {
if (f.isDirectory()){
method(f);
}else if(f.isFile()){
//输出打印java的文件
if (f.getName().endsWith(".java"))
System.out.println(f.getName());
}
}
}
}
/**
* 输出指定目录下的所有java文件名(不包含子目录)
*/
public static void method2(File file){
if (file.isDirectory()){
File[] files = file.listFiles();
for (File f : files) {
if (f.isFile()){
if (f.getName().endsWith(".java")){
System.out.println(f.getName());
}
}
}
}
}
}
案例代码二
删除指定的目录(包含子目录)
public class MyTest {
public static void main(String[] args) {
/**
* 删除指定的目录(包含子目录)
* 注意:如果要删除一个目录,则需要先删除这个目录下的所有子文件和子目录
*/
File f = new File("src/controller");
method(f);
}
public static void method(File file){
if (file.isDirectory()){
//干掉自己所有的子文件和子目录
//获取所有的子文件和子目录
File[] files = file.listFiles();
for (File f : files) {
if (f.isFile()){
//是文件直接删除
f.delete();
}else if(f.isDirectory()){
//继续查看是否还有文件和子目录
method(f);
}
}
}
//最后删除当前方法里的File对象
file.delete();
}
}