学习IO流之File篇

File

    (1)IO流操作中大部分都是对文件的操作,所以Java就提供了File类供我们来操作文件

         File:文件和目录(文件夹)路径名的抽象表示形式

    (2)构造方法

        A:File file = new File("e:\\demo\\a.txt"); 根据一个路径得到File对象

        B:File file = new File("e:\\demo","a.txt"); 根据一个目录和一个子文件/目录得到File对象

        C:File file = new File("e:\\demo");        根据一个父File对象和一个子文件/目录得到File对象

          File file2 = new File(file,"a.txt");

    (3)File类的功能(自己补齐)

        A:创建功能

          public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了

          public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了

          public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来

        B:删除功能

          public boolean delete()

               注意:

         A:如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。

         B:Java中的删除不走回收站。

         C:要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹

        C:重命名功能

          public boolean renameTo(File dest)

                  如果路径名相同,就是改名。

                  如果路径名不同,就是改名并剪切。

                  路径以盘符开始:绝对路径    c:\\a.txt      路径不以盘符开始:相对路径    a.txt

        D:判断功能

          public boolean isDirectory():判断是否是目录

          public boolean isFile():判断是否是文件

          public boolean exists():判断是否存在

          public boolean canRead():判断是否可读

          public boolean canWrite():判断是否可写

          public boolean isHidden():判断是否隐藏

        E:获取功能

          public String getAbsolutePath():获取绝对路径

          public String getPath():获取相对路径

          public String getName():获取名称

          public long length():获取长度。字节数

          public long lastModified():获取最后一次的修改时间,毫秒值

        F:高级获取功能

          public String[] list():获取指定目录下的所有文件或者文件夹的名称数组

          public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组

        G:过滤器功能

          public String[] list(FilenameFilter filter) 文件名称过滤器

          public File[] listFiles(FilenameFilter filter)

    (4)案例:

        A:输出指定目录下指定后缀名的文件名称

            a:先获取所有的,在遍历的时候判断,再输出

               

/*

 * 判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称

 *

 * 分析:

 *         A:封装e判断目录

 *         B:获取该目录下所有文件或者文件夹的File数组

 *         C:遍历该File数组,得到每一个File对象,然后判断

 *         D:是否是文件

 *             是:继续判断是否以.jpg结尾

 *                 是:就输出该文件名称

 *                 否:不搭理它

 *             否:不搭理它

 */

public class FileDemo {

    public static void main(String[] args) {

        // 封装e判断目录

        File file = new File("e:\\");



        // 获取该目录下所有文件或者文件夹的File数组

        File[] fileArray = file.listFiles();



        // 遍历该File数组,得到每一个File对象,然后判断

        for (File f : fileArray) {

            // 是否是文件

            if (f.isFile()) {

                // 继续判断是否以.jpg结尾

                if (f.getName().endsWith(".jpg")) {

                    // 就输出该文件名称

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

                }

            }

        }

    }

}

            b:先判断,再获取,最后直接遍历输出即可


import java.io.File;

import java.io.FilenameFilter;

/*

 * 判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称

 * A:先获取所有的,然后遍历的时候,依次判断,如果满足条件就输出。

 * B:获取的时候就已经是满足条件的了,然后输出即可。

 *

 * 要想实现这个效果,就必须学习一个接口:文件名称过滤器

 * public String[] list(FilenameFilter filter)

 * public File[] listFiles(FilenameFilter filter)

 */

public class FileDemo2 {

    public static void main(String[] args) {

        // 封装e判断目录

        File file = new File("e:\\");



        // 获取该目录下所有文件或者文件夹的String数组

        String[] strArray = file.list(new FilenameFilter() {

            @Override

            public boolean accept(File dir, String name) {

                // return false;

                // return true;

                // 通过这个测试,我们就知道了,到底把这个文件或者文件夹的名称加不加到数组中,取决于这里的返回值是true还是false

                // 所以,这个的true或者false应该是我们通过某种判断得到的     

                return new File(dir, name).isFile() && name.endsWith(".jpg");

            }

        });



        // 遍历

        for (String s : strArray) {

            System.out.println(s);

        }

    }

}



        B:批量修改文件名称


import java.io.File;



/*

 * 需求:把E:\评书\三国演义下面的视频名称修改为

 *         00?_介绍.avi

 *

 * 思路:

 *         A:封装目录

 *         B:获取该目录下所有的文件的File数组

 *         C:遍历该File数组,得到每一个File对象

 *         D:拼接一个新的名称,然后重命名即可。

 */

public class FileDemo {

    public static void main(String[] args) {

        // 封装目录

        File srcFolder = new File("E:\\评书\\三国演义");



        // 获取该目录下所有的文件的File数组

        File[] fileArray = srcFolder.listFiles();



        // 遍历该File数组,得到每一个File对象

        for (File file : fileArray) {

            // E:\评书\三国演义\三国演义_001_[评书网-今天很高兴,明天就IO了]_桃园三结义.avi

            // 改后:E:\评书\三国演义\001_桃园三结义.avi

            String name = file.getName(); // 三国演义_001_[评书网-今天很高兴,明天就IO了]_桃园三结义.avi



            int index = name.indexOf("_");

            String numberString = name.substring(index + 1, index + 4);

          

            int endIndex = name.lastIndexOf('_');

            String nameString = name.substring(endIndex);



            String newName = numberString.concat(nameString); // 001_桃园三结义.avi



            File newFile = new File(srcFolder, newName); // E:\\评书\\三国演义\\001_桃园三结义.avi



            // 重命名即可

            file.renameTo(newFile);

        }

    }

}

发布了114 篇原创文章 · 获赞 52 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Smile_Sunny521/article/details/89703678