1 File类的概述(File更应该叫做一个路径)
路径分为绝对路径和相对路径
绝对路径是一个固定的路径,从盘符开始
相对路径相对于某个位置,在eclipse下是指当前项目下
1.1 构造方法
File(String pathname):根据一个路径得到File对象
File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
import java.io.File; public class Damo1 { public static void main(String[] args) { // 1 根据一个路径得到File对象 注意:'\'是转译字符 要使用得用“\\” File file = new File("D:\\text.txt"); System.out.println(file.exists()); // 2 根据一个目录和一个子文件目录得到File对象 String parent = "D:"; String child = "text.txt"; File file1 = new File(parent,child); System.out.println(file1.exists()); // 3根据一个父File对象和一个子文件目录得到File对象 String parent3 = "D:"; String child3 = "text.txt"; File file3 = new File(parent3); //父级路径换成一个file对象 使得父级路径在传入时可以调用File类的一些方法 File file4 = new File( file3,child3); System.out.println(file4.exists()); } }
2 File类的常见功能
2.1 创建功能(如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。)
public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了
public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了
public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来
import java.io.File; import java.io.IOException; public class Damo2 { public static void main(String[] args) throws IOException { //注意:创建file对象时 文件路径可能出错 上抛一个编译时异常 IOException // 1 createNewFile() 如果D盘下不存在“text.txt”则创建新文件 返回true File file = new File("D:\\text.txt"); System.out.println(file.createNewFile()); // 2 mkdir():创建文件夹 如果D盘下没有text这个文件夹 则创建新的文件夹 返回true File dir2 = new File("D:\\text"); System.out.println(dir2.mkdir()); // 3 mkdirs():创建多级文件夹,如果父文件夹不存在,会帮你创建出来 File dir3 = new File("D:\\text\\text1"); System.out.println(dir3.mkdirs()); } }
2.2 重命名和删除功能
public boolean renameTo(File dest):把文件重命名为指定的文件路径
重命名注意事项(如果路径名相同,就是改名。如果路径名不同,就是改名并剪切。)
import java.io.File; public class Damo3 { public static void main(String[] args) { //如果路径名相同,就是改名。 //如果路径名不同,就是改名并剪切 File file1 = new File("C:\\text2.txt"); File file2 = new File("D:\\text1.txt"); // 将C盘下的text2.txt文件 剪切到D盘 并改名为text1 System.out.println(file1.renameTo(file2)); } }
public boolean delete():删除文件或者文件夹
删除注意事项:
Java中的删除不会存放到回收站。
要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹 其实window系统下删除文件夹 表面上看起来是把整个文件夹删掉了 其实内部也是对文件夹里的东西做了遍历删除 先将内层文件删除 确定文件夹为空后 再将空文件夹删除
import java.io.File; public class Damo4 { public static void main(String[] args) { //删除D盘下的text1文件 File file = new File("D:\\text1.txt"); System.out.println(file.delete()); //删除D盘下的text文件夹 (注意 要删除文件夹 那么该文件夹必须为空的) File file1 = new File("D:\\text"); System.out.println(file1.delete()); } }
2.3 File类的判断功能
public boolean isDirectory():判断是否是目录
public boolean isFile():判断是否是文件
public boolean exists():判断是否存在
public boolean canRead():判断是否可读
public boolean canWrite():判断是否可写
public boolean isHidden():判断是否隐藏
import java.io.File; public class Damo5 { public static void main(String[] args) { File file = new File("D:\\text.txt"); System.out.println("判断是否是目录"+file.isDirectory()); System.out.println("判断是否是文件"+file.isFile()); System.out.println("判断是否存在"+file.exists()); // 设置文件不可读 不过该方法Window系统下是失效的 Window默认设置所有文件都是可读的 file.setReadable(false); System.out.println("判断是否可读"+file.canRead()); // 设置文件设置不可写 Window支持此功能 file.setWritable(false); System.out.println("判断是否可写"+file.canWrite()); System.out.println("判断是否隐藏"+file.isHidden()); } }
2.4 File类的获取功能
public String getAbsolutePath():获取绝对路径
public String getPath():获取路径
public String getName():获取名称
public long length():获取长度。字节数
public long lastModified():获取最后一次的修改时间,毫秒值
public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; public class Damo6 { public static void main(String[] args) { File file = new File("D:\\text"); System.out.println("获取文件或文件夹的绝对路径:"+file.getAbsolutePath()); System.out.println("file对象构造方法传入的路径:" +file.getPath()); System.out.println("获取文件或者文件夹名称:"+file.getName()); System.out.println("获取文件内字节数:"+file.length()); //返回的是一个毫秒值 需进行转换 System.out.println("\n获取文件最后一次的修改时间,毫秒值"+file.lastModified()); //转换格式1 Date d = new Date(file.lastModified()); System.out.println(d); //转换自定义格式 SimpleDateFormat sdf = new SimpleDateFormat("yyy年 - MM月 - dd日 - HH点:mm分:ss秒"); System.out.println(sdf.format(d)); //list() 获取文件夹内所有文件的名称 返回的是一个String数组 System.out.println("\n获取文件夹内所有文件的名称:"); String [] arr = file.list(); for (String str:arr){ System.out.println(str); } //list() 获取指定目录下的所有文件或者文件夹的File对象 返回的是一个File对象数组 可以直接用对象进行操作 System.out.println("\n获取文件夹内所有文件的File对象:"); File [] files = file.listFiles(); for (File f1:files){ System.out.println(f1.getName()); } } }
小练习(需求:判断E盘目录下是否有后缀名为.txt的文件,如果有,就输出该文件名称)
import java.io.File; public class Damo7 { public static void main(String[] args) { File file = new File("D://"); // 方式1 String [] arr = file.list(); for (String str :arr){ if (str.endsWith(".txt")){ //调用字符串方法查看结尾字符 System.out.println(str); } } // 方式2 (开发常用 运用递归思想即可获取该文件夹下的所有需要的文件 这里只是简单的单层查找) File [] files = file.listFiles(); for (File file1 : files){ if (file1.isFile()&&file1.getName().endsWith(".txt")){ System.out.println(file1); } } } }
2.5 文件名称过滤器
public String[] list(FilenameFilter filter)
FilenameFilter接口里面有个 accept(File dir, String name)方法 实现该方法可以把不符合条件的文件过滤掉
(咋一看有点蒙 ,结合底下list() 方法的源码 把FilenameFilter接口当成传入list()的参数 多看几次就好了)
import java.io.File; import java.io.FilenameFilter; public class Damo8 { public static void main(String[] args) { File file = new File("D://"); //FilenameFilter()是接口 实例化得新建一个类实现它 太麻烦 这里直接传了一个匿名内部类 String[] arr = file.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { // 根据一个父File对象和一个子文件目录得到File对象 File file = new File(dir, name); // 如果file对象是文件 file对象的名字是以.txt结尾的 那么返回true 把他存进数组 return file.isFile() && file.getName().endsWith(".txt"); } }); //遍历数组 拿取数组内容 for (String str : arr) { System.out.println(str); } } } /* * =======================[ list 方法源码 ]============================= public String[] list(FilenameFilter filter) { String names[] = list(); //没有参数的list 拿到当前文件夹下所有的文件与文件夹 if ((names == null) || (filter == null)) { //如果数组为空或者过滤器filter为空 直接返回 names[] return names; } List<String> v = new ArrayList<>(); //新建一个数组 用来存储符合条件的文件名 for (int i = 0 ; i < names.length ; i++) { if (filter.accept(this, names[i])) { //如果过滤器方法条件成立 将该文件添加进集合 v.add(names[i]); } } return v.toArray(new String[v.size()]); // 将集合转换为数组后返回 } */