Java的问价操作File类

Java关于文件操作模块(File)

File类对文件的操作

File的方法结构.

看名字就大概知道方法的意思了。

构造方法(文件的创建方式)

以下案例自己在main函数里运行就可以了。

创建方式一 new File(String filePath)
    /**
     * @param filePath 系统磁盘的根节点到当前文件所在的目录和文件名
     */
    static void createFileway1(String filePath) {
        File file = new File(filePath);
        // 如:c:/user/src/Demo1.java
        // 如:/Volumes/huang/hello.txt
        //file.getAbsolutePath() 文件的绝对路径
        System.out.println(file.getAbsolutePath() + "," + file.length());
        //但是上面语句并不会在磁盘上创建文件,还需一句话
        try {
            file.createNewFile();//创建文件
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
创建方式二 new File(String filePath,String fileName)//第一个参数,文件路径,第二个参数,文件名

第一个参数必须是已存在的文件名。

    /**
         * @param filePath 已存在的文件路径
         * @param fileName 文件名
         */
        private static void createFileWay2(String filePath, String fileName) {
            File file = new File(filePath, fileName);
            if (!file.exists()) {
                //判断文件是否存在
                System.out.println("指定文件不存在");
                //创建
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return;
            }
            System.out.println(file.getAbsolutePath() + "," + file.length());
        }
创建方式三 new File(File dir,String fileName)//文件,文件名
    /**
     * @param filePath 文件路径
     * @param fileName 文件名
     */
    static void createWay3(String filePath, String fileName) {
        //构造文件目录对象
        File dir = new File(filePath);
        //判断是否为文件目录
        if (!dir.isDirectory()) {
            throw new RuntimeException("指定的目录不存在");
        }
        //构造最终的文件对象
        File file = new File(dir, fileName);
        if (!file.exists()) {
            try {
                //创建
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println(file.getAbsolutePath() + "," + file.length());
        }
    }
File 其他常用方法
  • boolean exits()判断文件是否存在

      static void exists(File file) {
              if (!file.exists()) {
                  throw new RuntimeException("目录不存在");
              }
          }
    
  • boolean mkdir()//只能创建单个目录(基本不用)、boolean mkdirs()//能创建多级目录

    static void mkdirs(File file) {// 判断+创建多级目录
                if (file.exists()) {
                    throw new RuntimeException("目录已存在");
                }
                //file.mkdir();//创建一级目录
                file.mkdirs();// 能创建多级目录
            }
    
  • boolean isFile() 判断是否是文件

      if (file.isFile()) {
          System.out.println("是文件");
      }
    
  • boolean delete()删除文件

      // 判断是否为文件
       if (file.isFile()||file.listFiles().length==0) {
    
           file.delete();
           System.out.println(file.getAbsolutePath()+"删除成功");
    
           }else if(file.listFiles().length!=0){
              throw new RuntimeException("非空目录不能直接删除");
        }
    
  • File[] listRoots();读取系统的跟目录

      static void listRoot(){//读取系统文件的根目录
              File[] root=File.listRoots();
              for(File f:root){
                  System.out.println(f);
              }
          }
    
  • String getName();文件名

  • String getPath()文件路径

  • String getAbsolutePath() 绝对路径

  • String getParent();所在目录

  • long lastModified()文件最后修改时间

案例一
    public class Demo {
        //绝对路径
        public static final String PATH = "/Volumes/huang/1/1.txt";

        public static void main(String[] args) {
            File file=new File(PATH);
            //判断是否存在,并且不是目录
            if(!file.exists() || !file.isFile()){
                throw new RuntimeException("文件不存在或是目录");
            }
            //获取日期格式化对象
            DateFormat df=DateFormat.getDateTimeInstance();
            Date mDate=new Date(file.lastModified());
            System.out.println("文件名:"+file.getName());
            System.out.println("文件路径:"+file.getPath());
            System.out.println("绝对路径:"+file.getAbsolutePath());
            System.out.println("所在目录:"+file.getParent());
            System.out.println("文件大小:"+file.length()+"字节");
            System.out.println("文件最后修改时间:"+df.format(mDate));
        }
    }
结果
案例二
        //我的盘,
        public static final String PATH = "/Volumes";
        //你的盘,
        //public static final String PATH = "D:/";
        public static DateFormat format=DateFormat.getDateTimeInstance();

        public static void main(String[] args) {
            showFiles(new File(PATH));//显示C盘目录下的所有文件及子目录信息
        }

        private static void showFiles(File file) {
            for (File file1 : file.listFiles()) {
              System.out.println(file1.getName()+"---->"+file1.length()+"B"+
                      "["+format.format(new Date(file1.lastModified()))+"]");
            }
        }
一个文件夹里面有很多不同后缀名的文件,我们怎么获取到同一类型的文件呢?眼尖的肯定在第一张图看到 File[] listFiles(FileFilter fileFilter)这个方法了。我们用的就是它。

文件过滤 FileFilter

public interface FileFilter {
    boolean accept(File var1);
}

一个接口,如果是指定类型的文件,则返回true。还有一个FilenameFilter。

文件过滤 FilenameFilter

public interface FilenameFilter {
    boolean accept(File var1, String var2);
}

也是一个接口,如果是指定类型的文件,则返回true。

用法案例一 FileFilter
    /**
         * //FileFileter 显示指定目录下的.txt文件
         *
         * @param path 指定目录
         */
        private static void testFileFileter(String path) {
            File file = new File(path);
            if (!file.isDirectory()) {
                throw new RuntimeException("不是一个有效的目录");
            }
            File[] files = file.listFiles(new FileFilter() {// 如果是指定类型的文件,则返回true
                @Override
                public boolean accept(File file) {
                    String fileName = file.getName();
                    //获取文件扩展名
                    String txt = fileName.substring(fileName.lastIndexOf(".") + 1);
                    if ("doc".equals(txt)) {
                        return true;
                    }
                    return false;
                }
            });

            //打印所有文件
            for (File file1 : files) {
                System.out.println(file1.getName());
            }

        }
用法案例二 FilenameFilter
     /**
         * FilenameFilter 显示指定目录下的.doc文件
         *
         * @param path
         */
        private static void testFilenameFilter(String path) {
            File file = new File(path);
            if (!file.isDirectory()) {
                throw new RuntimeException("不是一个有效的目录");
            }
            File[] files = file.listFiles(new FilenameFilter() {
                @Override
                public boolean accept(File file, String s) {
                    //假如你不知道 s 是什么,那你就把它打印出来看一看
                    System.out.println(s);
                    if (s.endsWith(".doc")) return true;
                    return false;
                }
            });
            System.out.println("================过滤后文件===========================");
            //打印所有文件
            for (File file1 : files) {
                System.out.println(file1.getName());
            }
        }
  • 递归打印指定目录所有文件及目录

      //我新建的测试文件
          public static final String PATH = "/Volumes/huang/Test";
          /**
           * 递归打印
           *
           * @param file
           */
          private static void printFiles(File file) {
              if (file.isDirectory()) {
                  for (File file1 : file.listFiles()) {
                      printFiles(file1);
                  }
              }
              //也是退出条件
              System.out.println(file);
          }
    
  • 递归删除指定目录所有文件及目录
    真的会删除文件,所以请你手动新建文件之后再删。

          //我新建的测试文件
           public static final String PATH = "/Volumes/huang/Test";
          // 实现递归方式删除文件目录及子目录中的文件
          private static void deleteFile(File file) {
              if (file.isDirectory()) {
                  for (File f : file.listFiles()) {
                      deleteFile(f);
                  }
              }
              file.delete();// 删除文件或空目录
              System.out.println(file + "已删除");
          }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,623评论 18 399
  • File类 File类用来操作文件路径或文件夹路径 绝对路径从根目录开始 相对路径在eclipse中代表当前项目根...
    JerichoPH阅读 577评论 0 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,651评论 18 139
  • 1 IONo18 1.1IO框架 【 IO:Input Output 在程序运行的过程中,可能需要对一些设备进...
    征程_Journey阅读 960评论 0 1
  • ios视频加字幕插件 github地址:https://github.com/mhergon/MPMoviePla...
    工匠良辰阅读 1,380评论 1 2