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

作者: 徐同学呀 | 来源:发表于2018-05-28 13:11 被阅读71次

    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流——配角也风流(不求甚解)

    相关文章

      网友评论

        本文标题:java基础io流——File告白(重温经典)

        本文链接:https://www.haomeiwen.com/subject/kwxgjftx.html