黑马程序员——Java基础——IO流的File类

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

File类:是用来操作文件和文件夹的类(流只能操作数据,不能操作文件)
一、获取信息
获取文件名称:getName()
获取相对路径:getPath( )
获取绝对路径:getAbsolutePath( )
获取绝对路径中的父目录:getParent( )
获取最后一次修改的时间:lastModefied( )
获取文件的长度:length( )

import java.io.*;
import java.text.*;
import java.util.*;

public class FileDemo
{
    public static void main(String[] args)
    {
        File f1=new File("f:\\aa.txt");

        String name=f1.getName();
        String path=f1.getPath();
        String absolutePath=f1.getAbsolutePath();
        String parent=f1.getParent();
        long time=f1.lastModified();
        long length=f1.length();

        //转换时间格式
        Date d=new Date(time);      
        DateFormat df=DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
        String conTime=df.format(d);

        System.out.println("name:"+name);
        System.out.println("path:"+path);
        System.out.println("absolutePath:"+absolutePath);
        System.out.println("parent:"+parent);
        System.out.println("time:"+time);
        System.out.println("转换后的时间为"+conTime);
        System.out.println("length:"+length);
    }
}

File类的其他主要方法:
File listRoots( ) :列出可用的系统根,如 C,D , F 盘 等
String list( ):返回一个字符串数组,表示目录中的文件和目录
String list( FilenameFilter ): 这里传入了一个过滤器,可以指定要获取的文件类型
File listFiles( ) :返回文件数组,表示目录中的文件
boolean createNewFile( ):创建一个空文件
boolean mkdir( ) :创建一个新目录
boolean mkdirs( ):创建一个多层新目录
boolean delete( ) : 删除文件或目录
boolean renameTo(File) : 重命名文件

import java.io.*;

public class FileTest2
{
    public static void main(String[] args) throws Exception
    {
        //test1();
        //test2();
        //test3();
        //test4();
        test5();
    }

    public static void test1()
    {
        File[] root=File.listRoots();   //列出可用系统根,该方法为静态方法
        for(File r:root)
        {
            System.out.println(r);
        }
    }

    public static void test2()
    {
        File f2=new File("f:\\abc");
        String[] fileName=f2.list();    //列出指定目录的文件和目录
        for(String s:fileName)
        {
            System.out.println(s);
        }


        String[] javaFileName=f2.list(new FileByJava());//列出目录中的符合过滤器要求的文件和目录
        for(String s:javaFileName)
        {
            System.out.println(s);
        }
    }

    public static void test3()
    {
        File f3=new File("f:\\abc");
        File[] file=f3.listFiles();
        for(File f:file)
        {
            System.out.println(f.length());     //可以操作文件,打印各文件的长度
        }
    }

    public static void test4() throws IOException
    {
        File file1=new File("f:\\cc.txt");
        file1.createNewFile();      //创建 cc.txt 文件
        file1.delete();     //删除指定文件

        File file2=new File("f:\\dd");  
        file2.mkdir();      //创建 dd文件夹,只能创建不存在的一层的

        File file3=new File("f:\\ee\\ff\\gg");  
        file3.mkdirs();     // mkdirs()方法,可以创建不存在的多层文件夹

    }

    public static void test5() throws IOException
    {
        File f5=new File("f:\\111.txt");
        //f5.createNewFile();

        File renameFile=new File("g:\\222.txt");//把文件重命名,如果是剪切文件也可以用这方法
        f5.renameTo(renameFile);
    }

}

class FileByJava implements FilenameFilter  //定义一个过滤器,通过实现FilenameFilter接口
{
    public boolean accept(File dir,String name) //覆盖接口中的accept()方法
    {   
        return name.endsWith("java");       //如果文件符合该要求,返回true
    }
}

列出指定目录下的所有内容:
因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可,在列出过程中出现的还是目录的话,还可以再次调用本功能,也就是函数自身调用自身,这种表现形式,或者编程手法,称为递归。

递归要注意:
1、限定条件;
2、要注意递归的次数,尽量避免内存溢出。

import java.io.*;

public class ListAllFile
{
    public static void main(String[] args)
    {
        File file=new File("f:\\aa");
        listAll(file);
    }

    public static void listAll(File file)
    {
        File[] files=file.listFiles();
        for(File f:files)
        {
            if(f.isDirectory()) //判断遍历到的文件是否文件夹,是的话就调用自身(即递归)
            {
                listAll(f);
            }

            System.out.println(f);
        }
    }
}

删除一个带内容的目录,删除原理:
在window中,删除目录从里面往外删除的,既然是从里往外删除,就需要用到递归。

import java.io.*;

public class DeleteFile
{
    public static void main(String[] args)
    {
        File file=new File("f:\\aa");
        deleteAll(file);
        System.out.println("删除成功");
    }

    public static void deleteAll(File file)
    {
        File[] files=file.listFiles();
        for(File f:files)
        {
            if(f.isDirectory())
            {
                deleteAll(f);   //判断是否目录,递归
            }
            f.delete();
        }
        file.delete();      //这个不能遗漏,最后要把最外面的文件夹也删除
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值