目录
概念:
- 用来将文件或者文件夹封装成对象
- 方便对文件与文件夹进行操作
- File对象可以作为参数传递给流的构造函数
- 了解File类中的常用方法
流和File类
流只能操作数据,而要想操作文件,需要File类
(注意:java的File类对Windows系统上的隐藏文件不一定有操作权限,但是操作的时候,会把隐藏文件也操作上,为了避免错误,需要加以判断,是否是隐藏文件)
方法:
构造方法
1.File(String path)
将一个字符串描述的路径,封装成一个 File对象。
2.File(String parent,String Child)
将两个字符串(父级路径, 子级路径),拼接之后形成的路径封装成一个File对象。
3.File(File parent, String child)
将File类型的父级路径和String类型的字节路径拼接成一个新路径,封装成File对象
创建功能
1、说明:
最终创建出来的是一个文件还是文件夹,不取决于路径名称
取决于调用的什么方法去创建
2、创建文件:
//在指定位置创建文件,如果该文件已经存在,则不创建,返回false,和输出流不一样,输出流对象一建立创建文件,而且文件已经存在,会覆盖
createNewFile();
3、创建文件夹:
mkdir()
创建文件夹,如果父级路径不存在,则文件夹创建失败,只能创建一级目录
mkdirs()
创建文件夹,如果父级路径不存在,则自动创建父级路径,再创建子级路径,可以创建多级目录
删除文件
boolean delete(); //删除失败返回false
void deleteOnExit();在程序退出时删除指定文件
判断功能
- exists(),判断调用者路径是否存在
- isFile(),判断调用者是否是一个文件
- isDirectory(),判断调用者是否是一个文件夹
获取功能方法
- public String getAbsolutePath() : 返回此File的绝对路径名字符串
- public String getPath() : 将此File转换为路径名字符串
- public String getName() : 返回由此File表示的文件或目录的名称
- public long length() : 返回由此File表示的文件的长度
例子:
import java.io.File;
public class FileDemo {
public static void main(String[] args) {
//创建文件对象
File file = new File("Test22.java");//创建文件对象,将其封装成file类对象,就可以调用file类的方法了
String absPath1 = file.getAbsolutePath();//获取文件的绝对路径,即全路径 返回的是String对象
File absPath2 = file.getAbsoluteFile();//获取文件的绝对路径,即全路径 返回的是File对象
String path = file.getPath();//File中封装的路径是什么获取到的就是什么。
String filename = file.getName();//获取文件名称
long size = file.length();//获取文件大小
System.out.println("absPath1="+absPath1);
System.out.println("absPath2="+absPath2);
System.out.println("path="+path);
System.out.println("filename="+filename);
System.out.println("size="+size);
}
}
list和listFiles()、过滤器
public class FileMethodDemo3 {
public static void main(String[] args) {
File dir = new File("e:\\java_code");
//获取的是目录下的当前的文件以及文件夹的名称。
String[] names = dir.list();
for(String name : names){
System.out.println(name);
}
//获取目录下当前文件以及文件对象,只要拿到了文件对象,那么就可以获取其中想要的信息
File[] files = dir.listFiles();
for(File file : files){
System.out.println(file);
}
}
}
注意:在获取指定目录下的文件或者文件夹时必须满足下面两个条件
1,指定的目录必须是存在的,
2,指定的必须是目录。否则容易引发返回数组为null,出现NullPointerException
list过滤器
要用到接口FilenameFilter,实现此接口的类示例可用于过滤器文件名,可以自己定义一个过滤器,实现此接口
//获取e:\\java文件夹下,文件名后缀是bmp的文件
public class FileMethodDemo
{
public static void main(String[] args)
{
File dir = new File("e:\\java");
String[] names = dir.list(new FilenameFilter()
{
//dir为你要删选文件的路径,name为你要删选的文件名称
public boolean accept(File dir,String name)
{
return name.endsWith(".bmp");
}
});
}
}
listFiles应用-递归
/*需求
列出指定目录下文件或者文件夹,包含子目录中的内容,也就是列出指定目录下所有内容
因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可
在列出过程中出现的还是目录的话,还可以再此调用本功能,也就是函数自身调用自身
这种表现形式或者编程手法称为递归
递归要注意:
1.限定条件
2.注意递归次数,要避免内存溢出
*/
class FileMethodDemo {
public static void main(String[] args)
{
File dir = new File("e:\\java");
showDir(dir);
}
public static void showDir(File dir)
{
System.out.println(dir);
Filep[] files =dir.listFiles();
for(int x=0;x<files.length;x++)
{
//如果是目录的话,继续往里面进
if(files[x].isDirectory())
showDir(files[x]);
else
System.out.println(files[x]);
}
}
}
示例二:删除文件-递归
/*
删除原理:在windows中,删除目录从里面往外删除的,既然是从里往外删除,就需要用到递归
*/
class FileMethodDemo {
public static void main(String[] args)
{
File dir = new File("e:\\java");
removeDir(dir);
}
public static void removeDir(File dir)
{
Filep[] files =dir.listFiles();
for(int x=0;x<files.length;x++)
{
//如果是目录的话,继续往里面进
if(files[x].isDirectory())
removeDir(files[x]);
else
System.out.println(files[x].toString()+":-file-:files[x].delete()");
}
System.out.println(dir+"::dir::"+dir.delete());
}
}