java基础——File类

File类

  • File类用来操作文件路径或文件夹路径,将文件和文件夹路径封装成对象,以提供更多的方法和属性来操作这些对象
  • File类不属于流对象,不能读写文件,但是可以作为参数传递给流对象的构造方法

File类中的静态常量

  1. static String pathSeparator 与系统相关的路径分隔符字符,为方便起见,表示为字符串分号 ;
  2. static char pathSeparatorChar 与系统相关的路径分隔符 ;
  3. static String separator 与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串 \
  4. 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();
    }
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容