继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

java基础io流——File的告白(重温经典)

绝地无双
关注TA
已关注
手记 333
粉丝 59
获赞 326

File类概述和构造方法

File类的概述

文件和目录路径名的抽象表示形式

构造方法

        public File(String pathname)        public File(String parent,String child)        public File(File parent,String child)

代码示例:

        File f1 = new File("E:\\huge.jpg");
        File f2 = new File("E:\\","huge.jpg");
        File f3 = new File("E:\\");
        File f4 = new File(f3,"huge.jpg");        String path = f4.getAbsolutePath();
        File f5 = new File(path);
        System.out.println(f5);//E:\huge.jpg
        System.out.println(f1.getParent());//E:\
        System.out.println(f4.getAbsoluteFile());//E:\huge.jpg
        System.out.println(f5.getAbsolutePath());//E:\huge.jpg

一般推荐第一种构造函数,但是其他两个也会用到。

File类的成员方法

创建功能

public boolean createNewFile()  创建文件

public boolean mkdir() 创建文件夹

public boolean mkdirs() 创建多个文件夹

        File f1= new File("e:/io");        //System.out.println(f1.mkdir());
        File f2= new File("e:/io/demo1/test1");        //System.out.println(f2.mkdirs());

        File f3= new File("e:/io/demo1/test1/t.txt");        try {
            System.out.println(f3.createNewFile());
        } catch (IOException e) {
            e.printStackTrace();
        }

创建成功返回true,如果存在就不创建返回false,创建一个文件时需要确保当前文件夹存在,所有要异常处理。

删除功能

public boolean delete()

        File f1= new File("e:/io/demo1/test1/t.txt");        //f1.delete();
        File f2= new File("e:/io/demo1/test1");
        f1.delete();
        System.out.println(f2.delete());//test1下不为空,false

注意:

delete可删除文件或者文件夹

java删除不走回收站

删除一个文件夹时,确保其下没有文件或者子文件夹

重命名功能

public boolean renameTo(File dest)

//    重命名  xfy1.txt 重命名为xfy2.txt
      File f1 = new File("e:/xfy1.txt");
      File f2 = new File("e:/xfy2.txt");        f1.renameTo(f2);

重命名还可以达到剪切的效果

        //剪切
        File f3 = new File("e:/xfy1.txt");        //f3.createNewFile();
        File f4 = new File("xfy1.txt");
        f3.renameTo(f4);        //剪切加重命名//        File f5 = new File("xfy1.txt");//        //f1.createNewFile();//        File f6 = new File("e:/xfy2.txt");//        f5.renameTo(f6);

判断功能

/*
 * 判断功能:
 * public boolean isDirectory():判断是否是目录
 * public boolean isFile():判断是否是文件
 * public boolean exists():判断是否存在
 * public boolean canRead():判断是否可读
 * public boolean canWrite():判断是否可写
 * public boolean isHidden():判断是否隐藏
 */
 
 
        File f1 = new File("xfy1.txt");
        System.out.println(f1.exists());
        System.out.println(f1.isFile());
        System.out.println(f1.isDirectory());
        System.out.println(f1.canRead());
        System.out.println(f1.canRead());

基本获取功能

/*
 * 获取功能:
 * public String getAbsolutePath():获取绝对路径
 * public String getPath():获取相对路径
 * public String getName():获取名称
 * public long length():获取长度。字节数
 * public long lastModified():获取最后一次的修改时间,毫秒值
 */
 
 
 // 创建文件对象
        File file = new File("demo\\test.txt");

        System.out.println("getAbsolutePath:" + file.getAbsolutePath());
        System.out.println("getPath:" + file.getPath());
        System.out.println("getName:" + file.getName());
        System.out.println("length:" + file.length());
        System.out.println("lastModified:" + file.lastModified());        Date d = new Date(f1.lastModified());
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");        String date = sdf.format(d);
        System.out.println(date);

高级获取功能

public String[] list()

public File[] listFiles()

/*
 * 获取功能:
 * public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
 * public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
 */
 
        File file = new File("e:/");        String[] files = file.list();        for (String s : files) {
            System.out.println(s);
        }
        System.out.println("------------");

        File[] filess = file.listFiles();        for (File filess1 : filess) {
            System.out.println(filess1.getName());

        }

获取e盘下所有.jpg文件并输出到控制台

        File f = new File("e:/");
        File[] files = f.listFiles();        for (File file : files) {            if (file.isFile()) {                if (file.getName().endsWith(".jpg")) {
                    System.out.println(file.getName());
                }
            }
        }

上面的方式是遍历e盘下所有文件并筛选出.jpg文件,还有一种方式是带着条件直接去找.jpg文件。

package io1;import java.io.File;import java.io.FileFilter;import java.io.FilenameFilter;/**
 * Create by stefan
 * Date on 2018-05-27  14:36
 * Convertion over Configuration!
 *//*
 * 判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
 * A:先获取所有的,然后遍历的时候,依次判断,如果满足条件就输出。
 * B:获取的时候就已经是满足条件的了,然后输出即可。
 *
 * 要想实现这个效果,就必须学习一个接口:文件名称过滤器
 * public String[] list(FilenameFilter filter)
 * public File[] listFiles(FilenameFilter filter)
 */public class demo8 {    public static void main(String args[]){
        File file = new File("e:/");//        File[] files = file.listFiles(new FilenameFilter() {//            @Override//            public boolean accept(File dir, String name) {//                System.out.println(dir+name);//                return new File(dir,name).isFile()&&name.endsWith(".jpg");//            }//        });//        System.out.println("--------------------------------");//        for (File file1 : files) {//            System.out.println(file1.getName());//        }

        File[] fs = file.listFiles(new FileFilter() {            @Override
            public boolean accept(File pathname) {                //System.out.println(pathname);
                return pathname.isFile()&&pathname.getName().endsWith(".jpg");
            }
        });        for (File f : fs) {
            System.out.println(f.getName());
        }//        file.list();//        file.list(new FilenameFilter() {//            @Override//            public boolean accept(File dir, String name) {//                return false;//            }//        });


    }
}

总结:

  1. listFiles有两种过滤器FilenameFilter、FileFilter

  2. list只有FilenameFilter

  3. 重写过滤器accept

  4. FilenameFilter  accept(File dir, String name)  dir是父路径,name是文件名

  5. FileFilter  accept(File pathname) pathname文件的绝对路径

  6. accept  return true  代表是满足条件的

小案例:

批量修改文件名

File f = new File("F:\\汤包\\IT时代\\一头扎进Hibernate4视频教程");
        File[] files = f.listFiles();        for (File file : files) {
            String name =file.getName();            //System.out.println(name);
            int start = name.indexOf("[");            int end = name.indexOf("]");            //[0,17)
            String newname = name.substring(start,end+1);            //System.out.println(newname);

            System.out.println(name.substring(end+1));
            File newFile = new File(file.getParent(),name.substring(end+1));

            file.renameTo(newFile);
        }
    }

以上是本人学习笔记整理,重温java经典,欢迎各位同道中人批评指正。

源码码云地址:
https://gitee.com/stefanpy/java

梦回io流完整目录:

java基础io流——File告白(重温经典)

java基础io流——OutputStream和InputStream的故事(温故知新)

java基础io流——字符流的变革(深入浅出)

java基础io流——配角也风流(不求甚解)



作者:潇潇漓燃
链接:https://www.jianshu.com/p/827b45b42c0c
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP