------- android培训、java培训、期待与您交流! ----------
File类
File是用来操作文件的类,表示文件和目录路径名的抽象表示形式。也就是说File既可以表示具体的文件,也可以表示文件夹,并且这个File对象对应的文件或文件夹在硬盘可能是不存在的。
用来将文件或者文件夹封装成对象
方便对文件与文件件进行操作
File对象可以作为参数传给流的构造函数,此时文件将作为流的起点或终点
File类常见方法:
1,创建。
boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false。
和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。
boolean mkdir():创建文件夹。
boolean mkdirs():创建多级文件夹。
File的构造函数,有四种方式创建File对象。
//创建File对象
public static void consMethod()
{
//将a.txt封装成file对象。可以将已有的和为出现的文件或者文件夹封装成对象。
File f1 = new File("a.txt");
File f2 = new File("c:\\abc","b.txt");
File d = new File("c:\\abc");
File f3 = new File(d,"c.txt");
//separator表示分隔符,适用于各个系统,在Windows上表示"\\"
File f4 = new File("c:"+File.separator+"abc"+File.separator+"zzz"+File.separator+"a.txt");
}
只创建一个File对象,它在硬盘上是不存在在的,这时需要调用createNewFile,mkdirs来创建文件或目录。
public static void method_2() throws IOException
{
//此时f文件在硬盘上不存在,f只表示一个抽象路径
File f = new File("file.txt");
//在硬盘上创建f文件
sop(f.createNewFile());
File dir = new File("abc\\kkk\\a\\a\\dd\\ee\\qq\\aaa");
//创建多级文件夹
sop("mkdir:"+dir.mkdirs());
}
2,删除。
boolean delete():删除失败返回false。如果文件正在被使用,则删除不了返回false。
void deleteOnExit();在程序退出时删除指定文件。
3,判断。
boolean exists() :文件是否存在.
isFile():判断是否为文件
isDirectory();判断是否为文件夹
isHidden();测试此抽象路径名指定的文件是否是一个隐藏文件。
isAbsolute();测试此抽象路径名是否为绝对路径名。
4,获取信息。
getName():返回由此抽象路径名表示的文件或目录的名称。
getPath():将此抽象路径名转换为一个路径名字符串。
getParent(): 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null
。
getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
long lastModified() 返回此抽象路径名表示的文件最后一次被修改的时间。
long length() 返回由此抽象路径名表示的文件的长度。如果此路径名表示一个目录,则返回值是不确定的。
public static void method_4()
{
File f = new File("file.txt");
//返回创建f时的路径就,即相对路径
sop("path:"+f.getPath());
//返回绝对路径
sop("abspath:"+f.getAbsolutePath());
sop("parent:"+f.getParent());
//该方法返回的是绝对路径中的父目录。如果获取的是相对路径,返回null。
//如果相对路径中有上一层目录那么该目录就是返回结果。
}
list方法
String[] list()
返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
public static void listDemo()
{
File f = new File("c:\\abc.txt");
String[] names = f.list();//调用list方法的file对象必须是封装了一个目录。该目录还必须存在。
for(String name : names)
{
System.out.println(name);
}
}
listFiles方法
返回一个抽象路径数组,这些路径名表示才抽象路径表示的目录中的文件
File dir = new File("c:\\");
File[] files = dir.listFiles();
for(File f : files)
{
System.out.println(f.getName()+"::"+f.length());
}
listFiles中可以传入一个过滤器,这时只有符合过滤条件的文件会被返回。
String[] arr = dir.list(new FilenameFilter()
{
//accept用于判断文件是否符合条件
public boolean accept(File dir,String name)
{
//只有bmp格式文件会被返回
return name.endsWith(".bmp");
}
});
递归
可以理解为函数自己调用自己。
注意:递归时一定要明确结束条件。
应用场景:
当某一功能要重复使用时。
通过方法toBin来演示,toBin的作用获取num的二进制,这就要不断的除以2。在方法内部调自己,直到num除以2为0。调用sop方法打印每次num除以2的余数,不过要调用完toBin方法后才执行,所以首先打印在递归中最后被调用的toBin方法中数据。
public static void toBin(int num)
{
if(num>0)
{
toBin(num/2);
System.out.println(num%2);
}
}
截图中方法toBin自己调用自己,直到最后条件终止不再调用,此时会依次返回,执行toBin中的剩余部分。
列出指定目录下文件或者文件夹,包含子目录中的内容。
也就是列出指定目录下所有内容。
package itcast.heima;
import java.io.File;
public class FileDemo3 {
public static void main(String[] args) {
File f = new File("D:\\QQ");
showDir(f,0);
}
//此处用于标示每一级目录,每增加一级,增加一个"--"
public static String getLevel(int level){
StringBuilder sb = new StringBuilder();
sb.append("|");
for(int i=0;i<level;i++){
sb.append("--");
}
return sb.toString();
}
public static void showDir(File file,int level){
//首先打印本级目录
System.out.println(getLevel(level)+file.getName());
level++;//目录级别自增
//将文件夹中的文件(也包括文件夹)放入数组中
File[] files = file.listFiles();
for(File f:files){
//判断f是否为文件夹
if(f.isDirectory())
{ //如果是文件及,继续调用自己
showDir(f,level);
}
else
System.out.println(getLevel(level)+f);
}
}
}