day19Java-IO-File

博客名称
Java-(中级)

IO-File

java.io.File
我们要想实现IO的操作,就必须知道硬盘上文件的表现形式。
而Java就提供了一个类File供我们使用。

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

File-构造方法

File(String pathname):根据一个路径得到File对象
File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象

代码演示

public class FileDemo {
    public static void main(String[] args) {
        //File(String pathname):根据一个路径得到File对象
        //把E:\Test\a.txt封装成File对象
        File file1 = new File("E:\\Test\\a.txt");
        System.out.println(file1);
        System.out.println("-------------------");

        //File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
        File file2 = new File("E:\\Test","a.txt");
        System.out.println(file2);
        System.out.println("-------------------");

        //File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
        File file3 = new File("E:\\Test");
        File file4 = new File(file3,"a.txt");
        System.out.println(file4);

        //以上三种方式效果是一样的
    }
}

结果:

E:\Test\a.txt
-------------------
E:\Test\a.txt
-------------------
E:\Test\a.txt
File-创建功能

public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了(创建文件夹成功放回true,否则false)注意:只能创建单个文件夹
public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了(创建文件成功放回true,否则false)
public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来(创建多个文件夹成功放回true,否则false)

代码演示

public class FileDemo {
    public static void main(String[] args) throws IOException {
        //需求1:在E盘创建一个aaa目录
        File file = new File("E:\\aaa");
        System.out.println("mkdir():"+file.mkdir());

        //需求2:在E盘aaa目录插件a.txt文件
        File file2 = new File("E:\\aaa\\a.txt");
        System.out.println("createNewFile():"+file2.createNewFile());
        
        //需求3:在E盘bbb目下创建b.txt文件
        //File file3 = new File("E:\\bbb\\b.txt");
        //注意:在某个文件夹下创建文件,这个文件夹首先要存在
        //System.out.println("createNewFile():"+file3.createNewFile());//IOExceptio:系统找不到指定路径
        
        //需求4:在E盘连续创建两个文件夹
        File file4 = new File("E:\\ccc\\ddd");
        //注意:在某个父文件夹创建子文件夹,这个父文件夹首先存在
        System.out.println("mkdir():"+file4.mkdir());

        //需求5:在E盘连续创建两个文件夹
        File file5 = new File("E:\\eee\\fff");
        System.out.println("mkdirs():"+file5.mkdirs());
    }
}
File-删除功能

删除功能:public boolean delete()

注意:
  		A:如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。
  		B:Java中的删除不走回收站。
  		C:要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹

代码演示

public class FileDemo {
    public static void main(String[] args) throws IOException {
        //注意:没指定盘符,默认是项目路径下
        File file = new File("a.txt");
        System.out.println(file.createNewFile());

        //在项目路径下创建几个文件夹
        File file2 = new File("aaa\\bbb\\ccc");
        System.out.println(file2.mkdirs());

        //删除功能:我要删除a.txt这个文件
        File file3 = new File("a.txt");
        System.out.println(file3.delete());

        //删除功能:我要删除ccc这个文件夹
        File file4= new File("aaa\\bbb\\ccc");
        System.out.println(file4.delete());

        //删除功能:我要删除aaa这个文件夹
        //注意:不能删除有内容(文件(夹))的文件夹
        File file5  = new File("aaa");
        System.out.println(file.delete());
        
        //要先删除文件夹中的内容
        File file6 = new File("aaa\\bbb");
        file6.delete();
        File file7 = new File("aaa");
        file7.delete();
    }
}
File-重命名功能

重命名功能:public boolean renameTo(File dest)
如果路径名相同,就是改名。
如果路径名不同,就是改名并剪切。

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

代码演示:

public class FileDemo {
    public static void main(String[] args) {

        //重命名功能:把林青霞.jpg重命名为东方不败.jpg
        File file = new File("林青霞.jpg");
        File file2 = new File("东方不败.jpg");
        System.out.println("delete():" + file.renameTo(file2));

        //重命名功能:把林青霞.jpg重命名为东方不败.jpg,并移动到E盘符下
        File file3 = new File("林青霞.jpg");
        File file4 = new File("E:\\东方不败.jpg");
        System.out.println(file3.renameTo(file4));

    }
}
File-判断功能

public boolean isDirectory():判断是否是目录
public boolean isFile():判断是否是文件
public boolean exists():判断是否存在
public boolean canRead():判断是否可读
public boolean canWrite():判断是否可写
public boolean isHidden():判断是否隐藏

代码演示

public class FileDemo {
    public static void main(String[] args) throws IOException {
        File file = new File("a.txt");
        file.createNewFile();
        
        //public boolean isDirectory():判断是否是目录
        System.out.println("isDirectory():"+file.isDirectory());//false
        //public boolean isFile():判断是否是文件
        System.out.println("isFile():"+file.isFile());//true
        //public boolean exists():判断是否存在
        System.out.println("extsts():"+file.exists());//true
        //public boolean canRead():判断是否可读
        System.out.println("canRead():"+file.canRead());//true
        //public boolean canWrite():判断是否可写
        System.out.println("canWrite():"+file.canWrite());//true
        //public boolean isHidden():判断是否隐藏
        System.out.println("isHidden():"+file.isHidden());//true
    }
}
File-获取功能1

public String getAbsolutePath():获取绝对路径
public String getPath():获取相对路径
public String getName():获取名称
public long length():获取长度。字节数
public long lastModified():获取最后一次的修改时间,毫秒值

代码演示

public class FileDemo {
    public static void main(String[] args) throws IOException {
        File file = new File("b.txt");
        file.createNewFile();

        //public String getAbsolutePath():获取绝对路径
        System.out.println("getAbsolutePath:" + file.getAbsolutePath());//D:\MyWorkSpace\basic-code\b.txt
        //public String getPath():获取相对路径
        System.out.println("getPath:" + file.getPath());//b.txt
        //public String getName():获取名称
        System.out.println("getName:" + file.getName());//b.txt
        //public long length():获取长度。字节数
        System.out.println("length:" + file.length());//0
        //public long lastModified():获取最后一次的修改时间,毫秒值
        long time = file.lastModified();
        System.out.println("lastsModified:" + time);//1585045748128
        
        //将long转为date
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date d = new Date(time);
        String format = sdf.format(d);
        System.out.println(format);
    }
}

结果:

getAbsolutePath:D:\MyWorkSpace\basic-code\b.txt
getPath:b.txt
getName:b.txt
length:0
lastsModified:1585045748128
2020-03-24
File-获取功能2

public String[] list():获取指定目录下的所有文件或者文件夹(包括隐藏)的名称数组(下级目录的内容不能获取)
public File[] listFiles():获取指定目录下的所有文件或者文件夹(包括隐藏)的File数组(下级目录的内容不能获取)
**注意:**如果指定目录是一个空目录,返回[]。如果指定的是一个文件,返回就是null值。
举例:

目录aaa
目录bbb/b.txt(b.txt是文件)
	File file1 = new File("aaa");
	File[] files=file.listFiles;//[]

	File file2 = new File("bbb\\b.txt");
	File[] files=file2.listFiles;//null

代码演示

public class FileDemo {
    public static void main(String[] args) {
        //File file  = new File("D:\\");
        File file = new File("D:\\360安全浏览器下载");

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

结果:

abbyy%2520finereader%252012%2520PE%252012.0.101.264%25E8%25A1%25A5%25E4%25B8%2581.rar
Del_Lic_Serv.bat
FixFiles
Java各知识点详细总结.pdf
吃点饭.ssf
火影忍者.ssf
结婚吧!!.ssf
补丁使用说明.txt
------------------------
abbyy%2520finereader%252012%2520PE%252012.0.101.264%25E8%25A1%25A5%25E4%25B8%2581.rar
Del_Lic_Serv.bat
FixFiles
Java各知识点详细总结.pdf
吃点饭.ssf
火影忍者.ssf
结婚吧!!.ssf
补丁使用说明.txt
File-练习
需求1:过滤文件

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

分析:
        1:把E盘封装成File对象
        2.使用File对象获取E盘下所有的文件或文件夹
        3.遍历File数组
                判断是否是文件
                       是:在判断是否是以.jpg结尾
                                是:输出
                                不是:不搭理
                       不是:不搭理

代码演示

public class FileDemo {
    public static void main(String[] args) {
        //封装E盘
        File file = new File("E:\\");
        //获取E盘下所有文件或者文件夹File数组
        File[] files = file.listFiles();
        //遍历File数组
        for (File f : files) {
            //判断是否是文件
            if (f.isFile()) {
                //判断是否以.jpg结尾
                if (f.getName().endsWith(".jpg")) {
                    System.out.println(f.getName());
                }
            }
        }
    }
}

结果:

东方不败.jpg
需求2:使用文件过滤器过滤文件

判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
A:先获取所有的,然后遍历的时候,依次判断,如果满足条件就输出。
B:获取的时候就已经是满足条件的了,然后输出即可。(使用文件过滤器java.io.FilenameFilter(接口))

要想实现这个效果,就必须学习一个接口:文件名称过滤器
public String[] list(FilenameFilter filter):文件过滤器,返回的是过滤好的文件
public File[] listFiles(FilenameFilter filter):文件过滤器返回的是过滤好额文件对象

代码演示1
public String[] list(FilenameFilter filter)

public class FileDemo {
    public static void main(String[] args) {
        File file = new File("E:\\");
        //返回的就是符合条件的文件了
        String[] files = file.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                //System.out.println(dir);
                //System.out.println(name);
                /*
                File f = new File(dir,name);
                boolean flag = f.isFile();
                boolean flag2 = name.endsWith(".jpg");
                return flag&&flag2;
                */
                return new File(dir,name).isFile() && name.endsWith(".jpg");

            }
        });

        for(String s:files){
            System.out.println(s);
        }
    }
}

结果:

东方不败.jpg

代码演示2

public class FileDemo2 {
    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) {
                return new File(dir, name).isFile() && name.endsWith(".jpg");
            }
        });

        for (File f : files) {
            System.out.println(f.getName());
        }
    }
}

结果:

东方不败.jpg
需求3:把E:\评书\三国演义下面的视频名称修改为00?_介绍.avi

代码演示

public class FileDemo03 {
    public static void main(String[] args) {
        //封装评书对象
        File file = new File("E:\\评书\\三国演义");
        //获取所有评书中的小说
        File[] files = file.listFiles();
        for (File f : files) {//三国演义_001_[评书网-今天很高兴,明天就IO了]_桃园三结义.avi

            //截取集数(这样写其实写死了,如果前面三国演义是变化的就不行了,所以不建议写死。)
            //String number = f.getName().substring(5, 8);//001
            //截取集数
            int index = f.getName().indexOf("_");//获取第一给底杠索引
            String number = f.getName().substring(index + 1, index + 4);

            //截取_桃园三结义.avi
            String content = f.getName().substring(f.getName().lastIndexOf("_"));//_桃园三结义.avi
            String pingshu = number.concat(content);//001_桃园三结义.avi
            System.out.println(pingshu);
            //重命名
            f.renameTo(new File(file, pingshu));
        }
    }
}

结果:

桃园三_桃园三结义.avi
十常之_十常之乱.avi
三英战_三英战吕布.avi
赤壁之_赤壁之战.avi
月下追_月下追貂蝉.avi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值