总结之java中File类和IO流(一)——File类方法介绍与使用

File是java中io包里的类,不分操作系统,在windows和linux用法一样。

文件当然离不开路径了:
相对路径:是一个简化的路径 相对当前项目的根路径 如:FileUtil.txt
绝对路径:是一个完整的路径 以盘符开始 如:F:\BaiduNetdiskDownload\FileUtil.txt
注意:
1.路径不区分大小写
2.路径中的文件名称分隔符windows使用反斜杠,反斜杠是转义字符,两个反斜杠代表一个普通的反斜杠

各个操作系统路径写法不一样,File也有处理方式
File.pathSeparator //路径分隔符,windows分号; linux是冒号:
File.separator //文件名称分隔符 windows反斜杠 \ linux 正斜杆 /

File类的三大构造方法

  1. File(String pathname) //pathname可以是目录或者文件,相对路径和绝对路径都可以

    File重写了Object的toString方法 file.toString为File路径

  2. File(String parent,String child) 根据parent
    路径字符串和child路径字符串创建一个新File实例
    参数:把路径分成了两部分 父路径和子路径可以单独书写,使用起来非常灵活,父路径和子路径可以变化
    File(“c://”,“a.txt”);

  3. File(File parent,String child) 用法和上面相同,可以放file文件 很方便

File类创建功能的方法

  1. boolean createNewFile() 不存在就返回true;存在返回false并创建文件,
    注意:1-此方法只能创建文件,不能创建文件夹
    2-创建文件的路径必须存在,否则会抛出异常
  2. boolean mkdir() 创建目录
    注意:1-此方法只能创建文件夹,不能创建文件
    2-不存在就返回true并创建文件夹;存在返回false;参数路径不存在也返回false
  3. boolean mkdirs() 创建多级目录
    单级和多级都可以使用。

File类判断功能的方法

1.boolean delete()
删除成功为true 文件夹中有内容,不会删除返回false,路径不存在也返回false。该删除为硬盘删除,不走回收站。

2 boolean deleteOnExit()文件使用后删除

File类获取功能的方法

1.String getName()//返回文件或者目录名称
2.String getPath()//将File转换为路径字符串
3.String getAbsolutePath()//获取File的绝对路径字符串
4.String getParent()//如果没有父目录返回null
5.long lastModified()//获取最后一次修改的时间
6.long length()//返回File表示的文件的长度,以字节为单位 、、文件夹没有大小概念,返回0。如果是错误路径,返回0
7.boolean renameTo(File f)
8.File[] liseRoots()//获取机器盘符
9.String[] list()返回的是字符串数组,直接是子的名称,不包含子文件夹中的
10.File[] listFiles()//返回的是直接子目录(文件)的抽象
注意:list()和listFiles()中
如果:构造方法目录的路径不存在,抛出空指针异常
如果:构造方法中路径不是目录,也抛出空指针异常

File类判断功能的方法

1 boolean canExecute() 判断文件是否可以执行

2 boolean canRead() 判断文件是否可读

3 boolean canWrite() 判断文件是否可写

4 boolean exist() 判断文件是否存在

5 boolean isDirectory() 判断文件是目录

6 boolean isFile() 判断是否是文件

7 boolean canHidden() 判断文件是否可见

8 boolean isAbsolute() 判断文件是否是绝对路劲 ,文件不存在也能判断

FileFilter和FilenameFilter

FileFilter是一个过滤File的接口
boolean accept(File pathname)
通过实现接口或匿名内部类的方式使用,file集合中的每一个文件都执行一下FileFilter中的accept方法,true通过,false拦截
FilenameFilter是过滤File名称的接口
boolean accept(File dir,String name) 测试指定文件是否应该包含在某个文件列表中
参数:File dir:构造方法中传递的被遍历的文件所在目录。String name:使用ListFiles方法遍历目录,获取的每一个文件、文件夹的名称。
当且仅当该名称应该包含在文件列表中时返回 true;否则返回 false。
FilenameFilter的性能比FileFilter的好.

File[] files = dir.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                boolean flag = false;
                if (pathname.getName().toLowerCase().endsWith(".ico")) {//输出后缀为.ico的文件路径 toLowerCase()大写字符转小写
                    flag = true;
                }
                return flag;
            }
        });

补充:
String中 startsWith、endsWith():
toLowerCase()大写字符转小写
if(a.startsWith(b)) //判断字符串a 是不是以字符串b开头。
if(a.endsWith(b)) //判断字符串a 是不是以字符串b结尾

File类实现功能需求

利用递归列出某目录下所有文件

public static void main(String[] args) {
        try {
            listDirectory(new File("D://upload"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void listDirectory(File dir) throws IOException{

        String [] filenames =dir.list();//返回的是字符串数组,直接是子的名称,不包含子文件夹中的

        File[] files =dir.listFiles();//返回的是直接子目录(文件)的抽象
        //递归遍历目录
        if(files!=null && files.length>0){
            for(File file:files){
                System.out.println(file);
                if(file.isDirectory()) {
                    //递归
                    listDirectory(file);
                }
            }
        }

    }

读取文件内容

 	try {
//            FileReader fileReader =new FileReader("C:\\Users\\Admin\\Desktop\\备注.txt");
//            BufferedReader bufferedReader =new BufferedReader(fileReader); //出现中文乱码
            File file =new File("C:\\Users\\Admin\\Desktop\\备注.txt");
            BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(new FileInputStream(file),"GBK"));
                String str2 = bufferedReader.readLine();
                while (str2 !=null){
                    System.out.println(str2);
                    str2 =bufferedReader.readLine();
                }
                 bufferedReader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

写入文件

   try {
            FileWriter fileWriter = new FileWriter("C:\\Users\\Admin\\Desktop\\readme.txt");
            fileWriter.write("你看见门口,大量的地方");
            fileWriter.flush();
            fileWriter.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

文件过滤

public static void main(String[] args){
        File[] files =File.listRoots();
        for(File file:files){
            System.out.println(file);
            if(file.length()>0){
                String[] filenames =file.list(new FilenameFilter(){
                    //file 过滤目录 name 文件名
                    public boolean accept(File file,String filename){
                        return filename.endsWith(".mp3");
                    }
                });
                for(String filename:filenames){
                    System.out.println(filename);
                }
            }
        }
    }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值