一、概述:
1、File类:在整个IO包中与文件本身有关的操作类,所有的与文件本身有关指的是创建、删除文件等操作。在java.io包中的File类本身是一个跨平台的文件操作类,所以在操作中要更多的考虑到各个操作系统的区别。
2、特点:
1)用来将文件或文件夹封装成对象
2)方便于对文件与文件夹的属性信息进行操作
3)File对象可以作为多数传递给流的构造函数
二、常用方法:
File类
File 即指文件也指文件夹。
File类构造方法和字段摘要
staticString pathSeparator 路径分隔符,window下是";"。
staticchar pathSeparatorChar 路径分隔符,window下是";"。
staticString separator 路径分隔符,window下是"\"。
staticchar separatorChar 路径分隔符,window下是"\"。
File(Fileparent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
File(Stringpathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File(Stringparent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
File(URIuri) 通过将给定的 file: /URI 转换为一个抽象路径名来创建一个新的 File 实例。
File的相关方法
StringgetName():返回文件名或路径名(若是路径,返回最后一级子路径名)
StringgetPath():返回对象对应的路径名
File getAbsoluteFile():返回绝对路径
StringgetAbsolutePath():返回对象对应的绝对路径
StringgetParent():返回文件目录的上一级目录名
booleanrenameTo(File newName):重命名此File对象对应的文件或目录,若重命名成功返回true;
booleanexists():判断对象对应的文件或目录是否存在;
booleancanWrite():判断对象对应文件或目录是否可写;
booleancanRead():判断对象对应文件或目录是否可读;
booleanisFile():判断对象是文件,不是目录;
booleanisDirectory() 判断对象的文件是否是一个目录;
booleanisAbsolute() 判断对象对应文件或目录是否为绝对路径名;
booleancreateNewFile() 当且仅当不存在,该方法创建一个该File对象所指定的新文件,创建成功返回true。
booleandelete():删除File对象所对应的文件或路径;
booleanmkdir() 创建File对象所对应的目录,调用该方法的File对象必须对应路径,而不是文件。
String[]list():列出File对象的所有子文件名和路径名。
File[]listFiles():列出File对象的所有子文件和路径。
staticFile[] listRoots():列出系统所有的根路径;
二、创建File对象:
方式一:File f1 =new File("a.txt");
---> 将a.txt封装成对象,可将已有的和未出现的文件或文件夹封装成对象
方式二:File f2 =new File("c:\\abc","b.txt");
---> 分别指定文件夹和文件。好处:降低了两者的关联程度,
方式三:File d = newFile("c:\\abc"); File f3 = newFile(d,"c.txt");
---> 可以传入父目录和文件名。
目录分隔符:调用File.separator,相当于是反斜杠 \
Ex1.创建File对象
- public class FileDemo {
- //File类已经提供了。
- // private static final String FILE_SEPARATOR = System.getProperty("file.separator");
- /**
- * @param args
- */
- public static void main(String[] args) {
- //将一个具体的路径封装成了File对象。可以封装存在的文件或目录,也可以封装不存在文件或目录。
- File file = new File("c:\\1.txt");
- //File(String parent,String child)
- File file1 = new File("c:\\","1.txt");
- File dir = new File("c:\\");
- File file2 = new File(dir,"1.txt");
- // File f = new File("c:"+FILE_SEPARATOR+"abc"+FILE_SEPARATOR+"1.txt");
- File f = new File("c:"+File.separator+"abc"+File.separator+"1.txt");
- System.out.println(f);
- }
- }
Ex2.File对象常用方法
- public class FileMethodTest {
- /**
- * @param args
- * @throws IOException
- */
- public static void main(String[] args) throws IOException {
- /*
- * File方法。:
- *
- * 1,获取文件的绝对路径。
- * String getAbsolutePath
- * 2,获取文件的路径。
- * String getPath();
- * 3,获取文件最后一次修改的时间,要求是x年x月x日。时间。
- * long lastModified()
- * 4,文件是否是隐藏的。
- * boolean isHidden()
- * 5,发现File对象封装的文件或者文件夹是可以存在的也可以是不存在。
- * 那么不存在的可否用file的功能创建呢?
- * 创建功能。
- * createNewFile()
- * 删除功能。
- * delete();
- * 6,一个File对象封装的文件或者文件加到底是否存在呢?
- * 判断存在功能。
- * exists()
- *
- * 7,getFreeSpace() 方法是什么意思?用Demo验证。getTotalSpace() getUsableSpace()
- *
- *
- * 8,获取指定文件夹中的所有文件和文件夹的名称。能不能只获取.java文件呢?
- */
- File file = new File("e:\\");
- // methodDemo1(file);
- // methodDemo2(file);
- System.out.println(file.getFreeSpace());
- }
- public static void methodDemo2(File file) throws IOException {
- //1,创建。
- // boolean b = file.createNewFile();//如果文件存在,则不创建返回false,不存在就创建,成功返回true。
- // System.out.println(b);
- //2,删除。
- // boolean b = file.delete();//删除文件夹时,必须保证该文件夹没有内容。有内容,必须先把内容删除后,才可以删除当前文件夹。
- // System.out.println("delete:"+b);
- // System.out.println(file.exists());
- //3,创建文件夹。
- boolean b = file.mkdirs();//创建多级目录。
- System.out.println(b);
- System.out.println("file:"+file.isFile());
- System.out.println("dir:"+file.isDirectory());
- }
- private static void methodDemo1(File file) {
- String path = file.getAbsolutePath();//获取文件对象的绝对路径,即使封装的是相对的,获取到的也是绝对的。
- String path1 = file.getPath();//获取的是file对象中的封装的路径。封装的是什么,获取到的就是什么。
- System.out.println("path="+path);
- System.out.println("path1="+path1);
- long time = file.lastModified();
- Date date = new Date(time);
- DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
- String str_date = dateFormat.format(date);
- System.out.println(time);
- System.out.println(str_date);
- boolean b = file.isHidden();
- System.out.println("isHidden():"+b);
- }
- }
Ex3.Filename过滤器
- import java.io.File;
- import java.io.FilenameFilter;
- import cn.itcast.filter.FilterByContain;
- import cn.itcast.filter.FilterBySuffix;
- public class FilenameFilterDemo {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // 能不能只获取指定目录下.java文件呢?//list(FilenameFilter filter);
- // 创建一个过滤器对象。
- File dir = new File("c:\\");
- //传入一个过滤器。
- FilenameFilter filter = new FilterBySuffix(".class");//过滤后缀名的过滤器。
- filter = new FilterByContain("Demo");
- String[] names = dir.list(filter);
- for (String name : names) {
- // if (name.endsWith(".class"))
- System.out.println(name);
- }
- }
- }
- import java.io.File;
- import java.io.FileFilter;
- public class FileFilterBySuffix implements FileFilter {
- private String suffix;
- public FileFilterBySuffix(String suffix) {
- super();
- this.suffix = suffix;
- }
- @Override
- public boolean accept(File pathname) {
- return pathname.getName().endsWith(suffix);
- }
- }
<二>递归
1.递归(Recursion)
现在要求输出一个给定目录中的全部文件的路径。
本程序肯定只能依靠递归的操作完成,因为在一个给定的路径下有可能还是文件夹,那么如果是文件夹的话则肯定要继续列出,重复判断。
递归:程序调用自身的编程技巧
递归就是在方法里调用自身;
在使用递归时,必须有一个明确的递归结束条件,称为递归出口。
Ex1:列出文件夹下所有文件(包含子文件夹内)
- import java.io.File;
- public class GetAllFilesTest {
- /**
- * @param args
- */
- public static void main(String[] args) {
- /*
- * 遍历指定目录下的内容(包含子目录中的内容)
- *
- * 递归:函数自身调用自身。函数内部又使用到了该函数功能。
- * 什么时候使用?
- * 功能被重复使用,但是每次该功能使用参与运算的数据不同时,可以考虑递归方式解决。
- *
- *
- *
- */
- File dir = new File("e:\\JavaSE_code");
- getAllFiles(dir);
- }
- public static void getAllFiles(File dir){
- System.out.println("dir:"+dir);
- //1,获取该目录的文件对象数组。
- File[] files = dir.listFiles();
- //2,对数组进行遍历。
- for(File file : files){
- if(file.isDirectory()){
- getAllFiles(file);
- }else{
- System.out.println("file:"+file);
- }
- }
- }
- }
Ex1:删除文件夹下所有文件(包含子文件夹内)
-
- import java.io.File;
- public class DeleteDirTest {
- /**
- * @param args
- */
- public static void main(String[] args) {
- /*
- * 删除一个带内容的文件夹。必须从里往外删。
- */
- File dir = new File("E:\\test");
- // System.out.println(dir.delete());
- deleteDir(dir);
- }
- public static void deleteDir(File dir) {
- // 1,列出当前目录下的文件以及文件夹。
- File[] files = dir.listFiles();
- // 2,对该数组进行遍历。
- for (File file : files) {
- // 3,判断是否有目录。如果有,继续使用该功能遍历,递归!如果不是文件夹,直接删除。
- if (file.isDirectory()) {
- deleteDir(file);
- } else {
- System.out.println(file + ":" + file.delete());
- }
- }
- System.out.println(dir + ":" + dir.delete());
- }
- }