1. 位于 java.io 包
  2. 用来将文件或者文件夹封装成对象
  3. 方便对文件和文件夹的属性信息进行操作
  4. File 对象可以作为参数传递给流的构造函数

构造函数

// 可以将一个已存在的, 或者不存在的文件或者目录封装成 File 对象
File f1 = new File("c:\\a.txt"); // 第二种方式
File f2 = new File("c:\\","a.txt"); // 第三种方式
File f = new File("c:\\");
File f3 = new File(f,"a.txt");

字段摘要

// 名称分隔符
static char separatorChar : 此字段为系统属性 file.separator 值的第一个字符.
在 UNIX 系统上, 此字段值为 '/'; 在 Windows 系统上, 它为 '\\'
static String separator // 路径分隔符
static char pathSeparatorChar : 此字段为系统属性 path.separator 值的第一个字符. static String pathSeparator

常见方法

// 1. 获取
1.1 获取文件名称: file.getName();
1.2 获取文件绝对路径: file.getAbsolutePath();
1.3 获取文件相对路径: file.getPath();
1.4 获取文件大小: long file.length();
1.5 获取文件修改时间: long file.lastModified(); // 2. 创建与删除
返回值为 boolean, 没有参数.
2.1 创建与删除文件
File file = new File("a.js"); // 将文件封装成对象 // 对文件的创建和删除
boolean b = file.createNewFile(); // 与输出流方式不一样, 如果文件不存在, 则创建;
// 如果文件存在, 则不创建
boolean b = file.delete(); void deleteOnExit(); // 在虚拟机退出时, 删除文件或文件夹 2.2 创建与删除文件夹
// 将文件夹封装成对象
File dir = new File("abc");
boolean b = dir.mkdir(); // 创建单级目录 File dir = new File("abc\\e\\f");
boolean b = dir.mkdirs(); // 创建多级目录 boolean b = dir.delete(); // 目录内有内容, 则无法删除 // 3. 判断
File file = new File("a.js");
// 最好先判断文件是否存在
boolean b = f.exists();
// 判断是否是个文件
boolean b = f.isFile();
// 判断是否是个文件夹
boolean b = f.isDirectory(); // 4. 重命名
File f1 = new File("c:\\0.mp3");
File f2 = new File("d:\\9.mp3");
// 如果重命名之后的文件与之前的文件不在同一个文件夹下, 会发生剪切
boolean b = f1.renameTo(f2); // 其他
1. // 获取所有盘符, 静态方法,可以直接类名调用
File[] files = File.listRoots(); File file = new File("d:\\");
// 获取某个盘符空闲空间
file.getFreeSpace();
// 获取某个盘符总空间
file.getTotalSpace();
// 获取某个盘符已用空间
file.getUsableSpace(); // 2. 获取当前目录下的文件以及文件夹的名称, 包含系统隐藏文件
File f = new File("C:\\");
String[] names = f.list();
for(String name:names){
System.out.println(name);
} // 注意: 调用 list 方法的 File 对象中封装的必须是目录(文件夹),
// 否则, 会发生 NullPointerException 异常
// 如果访问的是系统级目录, 也会发生空指针异常.
// 如果目录存在,但是没有内容, 会返回一个数组, 但是长度为 0. // 3. 获取当前目录下所有文件对象
File dir = new File("c:\\");
File[] files = dir.listFiles();

过滤器

  1. 文件名过滤:

    • FilenameFileter 接口
    • 只有一个方法 boolean accept(File dir, String name);
  2. 文件过滤
    • FileFilter 接口
// 需求: 获取某一个盘符下的 .java 文件

    public static void listDemo(){
File dir = new File("c:\\"); // String[] names = dir.list(); 返回 c 盘下的所有文件和目录
Strig[] names = dir.list(new FilterByJava());
} // 创建过滤器对象
public class FilterByJava implements FilenameFilter{ public boolean accept(File dir, String name){ // name 为目录下所有文件的名称 return name.endsWith(".java");
}
} // 需求二: 获取某一盘符下不是隐藏的文件
public static void listDemo_1(){
File dir = new File("c:\\"); File[] files = dir.listFile(new FilterByHidden());
} // 创建过滤文件对象
public class FilterByHidden implements FileFilter{ public boolean accept(File pathname){ return !pathname.isHidden();
}
}

深度遍历文件夹

// 需求: 对指定目录进行所有内容的列出(包含子目录中的内容)
// 也可以理解为深度遍历 public static void main(String[] args){ File dir = new File("e:\\demodir"); listAll(dir);
} public static void listAll(File dir){ // 输出文件夹名称
System.out.println("dir: "+dir.getName()); // 获取指定目录下, 当前的所有文件夹或者文件对象
File[] files = dir.listFiles(); for(int x=0; x<files.length; x++){ if(files[i].isDirectory){
listAll(files[x]);
} else {
System.out.println(files[x].getName());
}
}
} // 升级版,显示为目录层级格式 public static void main(String[] args){ File dir = new File("e:\\demodir"); listAll(dir,0);
} public static void listAll(File dir, int level){ System.out.println(getSpace(level)+dir.getName()); level++;
File files = dir.listFiles(); for(int x=0; x<files.length; x++){ if(files[x].isDirectory()){
listAll(files[x],level);
}else{
System.out.println(getSpace(level)+files[x].getName());
}
}
} public static String getSpace(int level){ StringBuilder sb = new StringBuilder(); sb.append("|--")
for(int x=0; x<level; x++){
sb.insert(0,"| "); // 在 0 位置插入
} return sb.toString();
}

递归

  1. 函数自身直接或者间接调用了自身
  2. 注意:
    • 递归一定要明确条件, 否则容易栈溢出
    • 注意递归的次数. 次数过多, 也会导致栈溢出
// 输入一个数, 获取从 1 到这个数的和
// 例如 输入3, 获取 1~3 的和 public static int getSum(int num){
if(num == 1)
return 1; return num+getSum(num-1);
}

// 综合练习: 获取指定目录下, 指定扩展名的文件(包含子目录中的文件)
// 将这些文件的绝对路径写入到一个文本文件中
// 简单说, 就是建立一个指定扩展名的文件列表 /*
* 思路:
* 1. 必须对文件夹进行深度遍历
* 2. 要在遍历的过程中进行过滤, 将符合条件的内容都存储到容器中
* 3. 对容器中的内容进行遍历并将绝对路径写入到文件中
*/ public static void main(String[] args) throws IOException{ File dir = new File("e:\\java"); // 匿名内部类
FilenameFilter filter = new FilenameFilter(){
public boolean accept(File dir, String name){
return name.endsWith(".java");
}
}; List<File> list = new ArrayList<File>(); getFiles(dir,filter,list); File destFile = new File(dir,"javalist.txt");
write2File(list,destFile);
} // 将符合条件的内容存储到容器中
public static void getFiles(File dir, FilenameFileter filter, List<File> list){ File[] files = dir.listFiles(); for(File file : files){
if(file.isDirectory){
// 递归, 进行深度遍历
getFiles(file, filter, list);
} else {
// 对遍历到的文件进行过滤器的过滤, 将符合条件的 File 对象, 存储到 List 集合中
if(filter.accept(dir,file.getName())){
list.add(file);
}
}
}
} public static void write2File(List<File> list, File destFile) throws IOException{ BufferedWriter bufw = null;
try{
bufw = new BufferedWriter(new FileWriter(destFile)); for(File file:list){
bufw.write(file.getAbsolutePath()); // 按写入字符串的方式
bufw.newLine();
bufw.flush(); // 不要忘记刷新
}
} finally {
if(bufw!=null)
try{
bufw.close();
} catch (IOException e){
throw new RuntimeException("关闭失败");
}
}
}

参考资料

IO 之 File 类的更多相关文章

  1. Java—IO流 File类的常用API

    File类 1.只用于表示文件(目录)的信息(名称.大小等),不能用于文件内容的访问. package cn.test; import java.io.File; import java.io.IOE ...

  2. java io包File类

    1.java io包File类, Java.io.File(File用于管理文件或目录: 所属套件:java.io)1)File对象,你只需在代码层次创建File对象,而不必关心计算机上真正是否存在对 ...

  3. Java的IO操作---File类

    目标 1)掌握File类作用 2)可以使用file类中方法对文件进行读写操作. File类 唯一与文件有关的类.使用file类可进行创建或删除操作,要想使用File类,首先观察File类的构造方法. ...

  4. java之io之File类的list()方法过滤目录的使用

    java的io的知识中,File类必须掌握.File类是对文件或者文件夹的封装.它本身并不能对所封装的文件进行读写,它封装的只是文件或文件夹的周边知识,比如 大小啦,创建日期啦,路径啦等等. 如果Fi ...

  5. java之io之file类的常用操作

    java io 中,file类是必须掌握的.它的常用api用法见实例. package com.westward.io; import java.io.File; import java.io.IOE ...

  6. JAVA:IO流——File类

    1.掌握File 类的作用 2.可以使用File 类中的方法对文件进行操作 所有的 io 操作都保存在 java.io 包中. 构造方法:public File (String pathname) 直 ...

  7. java IO之 File类+字节流 (输入输出 缓冲流 异常处理)

    1. File类

  8. Java基础---IO(二)--File类、Properties类、打印流、序列流(合并流)

    第一讲     File类 一.概述 1.File类:文件和目录路径名的抽象表现形式 2.特点: 1)用来将文件或文件夹封装成对象 2)方便于对文件与文件夹的属性信息进行操作 3)File类的实例是不 ...

  9. java学习笔记IO之File类

    File类总结 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times } p.p2 { margin: 0.0px 0.0px 0.0p ...

  10. Java IO流-File类

    2017-10-24 23:50:22 File类 File类:文件和目录路径名的抽象表示形式.该文件或者目录不一定真实存在. * 构造方法 File类有四种构造方法,主要采用的构造方法师第二种,也就 ...

随机推荐

  1. C#.NET中使用BackgroundWorker在模态对话框中显示进度条

    这里是一个示例,其中展示了如何使用Backgroundworker对象在模态对话框中显示后台操作的实时进度条. 首先是主窗体代码: using System; using System.Collect ...

  2. 修正ECMALL在PHP5.3以上版本中无法开启支付方式的BUG

    修正ECMALL在PHP5.3以上版本中无法开启支付方式的BUG 很多用户反映说PHP5.3.3下,ECMALL的商家无法安装支付方式,这个是比较严重的事情,不能安装支付方式那什么都不能干呢,那我就免 ...

  3. CCNA2.0笔记_IPv6

    IPv6地址表示方法: 连续的零字段可表示为:: (每个地址只能用一次) 示例: 2031:0000:130F:0000:0000:09C0:876A:130B –可表示为2031:0:130f::9 ...

  4. hadoop节点挂死的一次分析报表。

    hadoop的一个节点unused了.然后重启启动hadoop的服务,仍有有一个hadoop的节点起不来.多次重启hadoop和杀进程之后,发现hadoop的master和slave节点上的状态在切换 ...

  5. 跟着百度学PHP[17]-PHP扩展CURL的POST传输数据

    如果是GET的话就不必那么多设置.但是基本需要用到POST就需要用到以下的几个设置选项. <?php $username = "admin"; $password = &qu ...

  6. hdu6058 Kanade's sum 区间第k大

    /** 题目:Kanade's sum 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6058 题意:给定[1,n]的排列,定义f(l,r,k)表示区间[l ...

  7. leetcode || 64、Minimum Path Sum

    problem: Given a m x n grid filled with non-negative numbers, find a path from top left to bottom ri ...

  8. (转)Python爬虫学习笔记(2):Python正则表达式指南

    以下内容转自CNBLOG:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 1. 正则表达式基础 1.1. 简单介绍 正则表达式并 ...

  9. php 判断是否在微信浏览器中打开

    <?php $a=false; $b=$_SERVER['HTTP_USER_AGENT']; if(strpos($b,"MicroMessenger")===false) ...

  10. SecureCRT超级终端使用说明

    SecureCRT超级终端使用说明 一.连接POS机 1.运行SecureCRT,选择‘文件’菜单,在下拉菜单中选择‘快速连接’菜单: 2.在弹出的对话框中按如下图选择参数: 3.POS端开机,且数据 ...