Java File类

一 File 类

File 是文件或者目录的抽象表示形式 .也就是说它既可以表示一个标准文件(比如 : *.txt等)也可以表示一个目录(一组文件的集合).

说明 : 由于本文只是学习File类的相关API,因此直接使用代码来测试API,代码中有相应注释. 因此在代码之外不会有过多的文字描述.

1.1 File 类的静态成员.

注意 : 名称 != 路径

// 与系统有关的默认 名称 分割符.
System.out.println("名称分割符 : " + File.separator);
System.out.println("名称分割符 : " + File.separatorChar);
// 与系统有关的 路径 分隔符
System.out.println("路径分割符 : " + File.pathSeparator);
System.out.println("路径分割符 : " + File.pathSeparatorChar);
// 输出
// 名称分割符 : \
// 名称分割符 : \
// 路径分割符 : ;
// 路径分割符 : ;

1.2 创建 File 和 文件.

/**
 * 创建和修改.
 */
public static void testFile_04() {
    // 创建 File ,如果文件路径不存在则同样可以创建一个File实例.
    // 因此不要使用 file==null 判断文件是否存在.应该使用  file.exists();
    File file1 = new File("D:/TestForlder/123.txt");
    System.out.println("存在 : " + file1.exists());
    // 当文件不存在时创建文件
    try {
        System.out.println(file1.createNewFile());
    } catch (IOException e) {
        e.printStackTrace();
    }
    // 创建临时文件
    try {
        // 注意文件名称不是 "456.java" ,而是 "456" + "系统生成的字符串" + ".java"
        // 临时文件 : D:\TestForlder\4563410495359450983005.java
        File file2 = File.createTempFile("456", ".java",new File("D:/TestForlder"));
        System.out.println("临时文件 : " + file2.getAbsolutePath());
    } catch (IOException e) {
        e.printStackTrace();
    }
    // 删除文件
    System.out.println(file1.delete());
    // 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
    new File("D:/TestForlder/1.java").deleteOnExit();
    
    // 创建路径 , 父目录必须存在.不会自动创建父目录. 
    System.out.println("创建路径 : " + new File("D:/TestForlder/111").mkdir());
    // 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
    System.out.println("递归创建目录 : " + new File("D:/TestForlder/222/333").mkdirs());
    // 重命名文件.
    System.out.println(new File("D:/TestForlder/2.java")
            .renameTo(new File("D:/TestForlder/重命名.java")));
}

1.3 设置文件属性.

/**
 * 设置文件属性.
 */
public static void testFile_05() {
    File file = new File("D:/TestForlder/3.java");
    // 设置 所有者执行权限
    file.setExecutable(true);
    // 设置所有者或所有用户执行权限
    file.setExecutable(true, false);
    // 设置最后修改时间
    file.setLastModified(123);
    // 设置所有者读权限
    file.setReadable(true);
    // 设置所有者或所有用户的读
    file.setReadable(true, false);
    // 设置只读
    file.setReadOnly();
    // 设置所有者写权限
    file.setWritable(true);
    // 设置所有者或者所有用户的写权限
    file.setWritable(true, false);
}

1.4 基本信息API

/**
 * File 获取信息.
 */
public static void testFile_03() {
    // getName() :  返回由此抽象路径名表示的文件或目录的名称。该名称是路径名名称序列中的最后一个名称。如果路径名名称序列为空,则返回空字符串。
    // getPath() :  将此抽象路径名转换为一个路径名字符串。所得字符串使用默认名称分隔符分隔名称序列中的名称。
    // getParent() : 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
    // 局对路径
    File file = new File("D:/TestForlder");
    System.out.println("绝对路径 : " + file.getPath());
    // 相对路径
    File file2 = new File(".");
    System.out.println("相对路径 : " + file2.getPath());
    // 获取绝对路径 File JDK 文档上说是相当于 : new File(file2.getAbsolutePath());
    File fileAb = file2.getAbsoluteFile();
    File fileAb2 = new File(file.getAbsolutePath());
    System.out.println("绝对路径文件 : " + fileAb.getPath());
    // File 对象的局对路径.
    System.out.println("绝对路径 : " + file.getAbsolutePath());
    // 指定路径所在分区的剩余空间.
    System.out.println("可用空间 : " + file.getFreeSpace() / (1024 * 1024 * 1024) + " G");
    // 获取父目录名称
    System.out.println("父目录名称 : " + file.getParent());
    // 此路径上的总空间 
    System.out.println("总空间 : " + file.getTotalSpace() / (1024 * 1024 * 1024) + " G");
    // 抽象路径名指定的分区上可用于此虚拟机的字节数。
    System.out.println("JVM 可用空间 : " + file.getUsableSpace() / (1024 * 1024 * 1024) + " G");
    // 最后修改时间
    System.out.println("最后修改时间 : " + file.lastModified());
    // 文件长度
    System.out.println("文件长度 : " + file.length());
    System.out.println("执行 : " + file.canExecute());
    System.out.println("可读 : " + file.canRead());
    System.out.println("可写 : " + file.canWrite());
    System.out.println("存在 : " + file.exists());
    System.out.println("绝对路径 : " + file.isAbsolute());
    System.out.println("目录 : " + file.isDirectory());
    System.out.println("标准文件 : " + file.isFile());
    System.out.println("隐藏文件 : " + file.isHidden());
}

1.6 基本目录操作

/**
 * 目录下文件.
 */
public static void testFile_01() {
    // 文件路径.
    String filePath = "D:/TestForlder";
    // 创建目录File对象.
    File file = new File(filePath);
    // 获取目录下的所有文件. 使用正则表达式查找所有的 ".java" 文件.
    String[] list = file.list(new MainEntry.DirFilter("\\w+.java"));
    // 排序
    Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);
    // 打印
    for (String string : list) {
        System.out.println("文件 : D:/TestFordler/" + string);
    }
}

/**
 * @author WSJ
 * 文件名称过滤器,<br>
 * 该类实现了 `FilenameFilter`接口.该接口只有一个`accept()`方法
 * 该目录下的每一个文件口会执行该方法,来确定是否符合条件.
 */
public static class DirFilter implements FilenameFilter {
    // 正则表达式
    private Pattern mPattern;
    public DirFilter(String regex) {
        mPattern = Pattern.compile(regex);
    }
    @Override
    public boolean accept(File dir, String name) {
        // 使用正则表达式过滤文件, 每一个文件都会在这个方法中进行判断是否符合条件.
        return mPattern.matcher(name).matches();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,392评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,258评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,417评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,992评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,930评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,199评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,652评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,327评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,463评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,382评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,432评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,118评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,704评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,787评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,999评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,476评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,057评论 2 341

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,537评论 18 399
  • File类   File类是java.io包下代表与平台无关的文件和目录,也就是说如果希望在程序中操作文件和目录都...
    琦琦出去玩了阅读 330评论 0 0
  • File类将文件和文件夹以及路径封装成对象,以提供更多的方法和属性来操作这些对象。File类不属于流对象,不能读写...
    比轩阅读 1,105评论 0 2
  • 1 有段时间朋友小A和我说她有些熬不下去了。 我问她,为什么? 过了半晌,微信亮了一下,只有短短的两个字:“没钱。...
    少女陆sunny阅读 1,472评论 17 33
  • 偶然听到周杰伦08年的《稻香》,歌词里说“打开电视看看 多少人为生命在努力地走下去 我们是不是该知足”。那年地震,...
    Sisi_1204阅读 168评论 0 0