一、File
Io概述:
当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。
当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。
因此我们把这种输入和输出动作称为IO操作。
File类的构造函数:
文件及文件夹的一系列操作方法:
listFiles()方法9-10
代码实现:
package com.oracle.io; import java.io.File; import java.io.IOException; //File 类包含 //1.路径 path e:\java_code\day22e\hello.java //2.目录 directory 文件夹 //3.文件 file public class Demo01 { public static void main(String[] args) throws IOException { /*method2(); method3(); method4(); method5(); method6(); method7(); method8(); method9();*/ method10(); } public static void method1(){ //与系统有关的路径分隔符win ; Linux : System.out.println(File.pathSeparator); //与系统有关的名称分隔符win Linux / System.out.println(File.separator); } public static void method2(){ //File类构造方法不会给你检验这个文件或者文件夹是否真实存在 //File file=new File("X:\test\a.txt"); //File file=new File("X:","test"); File f1=new File("X:\test"); File file=new File(f1,"a.txt"); System.out.println(file); } public static void method3(){ //File file=new File("X:\test\a.txt"); File file=new File("src"); //相对路径走的是本工程路径 System.out.println(file.getAbsolutePath()); } public static void method4(){ //获取本路径目录名或者文件名 File file=new File("X:\test\a.txt"); System.out.println(file.getName()); //getPath()和toString()一个作用 System.out.println(file.getPath()); //返回文件的长度long(字节数) System.out.println(file.length()); } public static void method5() throws IOException{ //创建文件(只能创建文件不能创建文件夹) File file=new File("X:\test\b.txt"); boolean flag=file.createNewFile(); System.out.println(flag); } public static void method6(){ //创建文件夹(不能创建文件) File file=new File("X:\test\e\f"); //boolean flag=file.mkdir();//单级目录 boolean flag=file.mkdirs();//多级目录 System.out.println(flag); } public static void method7(){ //删除文件或文件夹 //直接从硬盘上删除,不走回收站 //删除需谨慎 File file=new File("X:\test\b.txt"); boolean flag=file.delete(); System.out.println(flag); } public static void method8(){ File file=new File("X:\test\a.txt"); //判断file对象表示的文件或文件夹是否真实存在 //boolean flag=file.exists(); //判断是否是文件夹 //boolean flag=file.isDirectory(); //是否是文件 boolean flag=file.isFile(); System.out.println(flag); } public static void method9(){ File file=new File("X:\test"); //获取此路径下所有的文件或文件夹的字符串名称 String[] files=file.list(); for(String s:files){ File f1=new File(file,s); if(f1.getName().equals("a.txt")){ f1.delete(); } } } public static void method10(){ File file=new File("X:\test"); File[] files=file.listFiles(); for(File f:files){ System.out.println(f); } } }
注意:在获取指定目录下的文件或者文件夹时必须满足下面两个条件
1,指定的目录必须是存在的,
2,指定的必须是目录。否则容易引发返回数组为null,出现NullPointerException
文件过滤器:
package com.oracle.io; import java.io.File; import java.io.FileFilter; public class MyFilter implements FileFilter{ public boolean accept(File pathname) { /* String name=pathname.getName().toLowerCase(); boolean flag=name.endsWith(".java");*/ return pathname.getName().toLowerCase().endsWith(".java"); } } import java.io.File; public class Demo02 { public static void main(String[] args) { File file=new File("x:\test"); File[] files=file.listFiles(new MyFilter()); for(File f:files){ System.out.println(f); } } }
图解:
有参:
当listFile获取路径时,会调用accept方法,然后把路径传过去,运行accept方法,如果返回true,则存进
File数组中,反之;如果返回false,就不存;最后遍历输出结果。
无参:
import java.io.File; //获取某目录下所有的文件 public class Demo03 { public static void main(String[] args) { File file=new File("x:\test"); getAllFile(file); } public static void getAllFile(File file){ //获取该目录下的文件及文件夹 File[] files=file.listFiles(); //遍历 for(File f:files){ if(f.isDirectory()){ getAllFile(f); }else{ System.out.println(f); } } } }
文解:
创建一个File数组,调用无参方法;进行遍历,先进行判断,如果f是文件夹的话,则遍历到它的子目录,
讲子目录下的文件存入数组,反之打印遍历到的所有文件。
递归
递归分为两种,直接递归和间接递归。
直接递归称为方法自身调用自己。
举例:
public class Demo04 { //递归:要运行的方法主体不变,而参与运行的方法参数会变 //递归必须要写一个程序出口,否则该程序没有意义 public static void main(String[] args) { getNum(3); } //计算1-100的和,用递归做 public static int getNum(int n){ if(n==1){ return 1; } return n+getNum(n-1); } }
递归打印所有子目录中的文件路径
public class YourFilter implements FileFilter{ public boolean accept(File pathname) { //如果是文件夹,则不进行过滤,认为满足条件加到File数组中 if(pathname.isDirectory()){ 判断是否是文件夹 return true; 是则不过滤并存入数组 }else{ return pathname.getName().toLowerCase().endsWith(".java"); 反之打印带有.java后缀的文件 } } }
public class Demo05 { public static void main(String[] args) { File file=new File("x:\test"); getAllFile(file); } public static void getAllFile(File file){ File[] files=file.listFiles(new YourFilter()); for(File f:files){ if(f.isDirectory()){ 判断是否是文件夹 getAllFile(f); 显示子目录存入数组 }else{ System.out.println(f); 反之打印文件 } } } }
搜索指定目录中的.java文件(含子目录)
public class FileDemo4 { public static void main(String[] args) { File file = new File("d:\test"); getFileAll(file); } //获取指定目录以及子目录中的所有的文件 public static void getFileAll(File file) { File[] files = file.listFiles(MyFileFilter()); //遍历当前目录下的所有文件和文件夹 for (File f : files) { //判断当前遍历到的是否为目录 if(f.isDirectory()){ //是目录,继续获取这个目录下的所有文件和文件夹 getFileAll(f); }else{ //不是目录,说明当前f就是文件,那么就打印出来 System.out.println(f); } } } } //定义类实现文件名称FilenameFilter过滤器 class MyFileFilter implements FilenameFilter{ public boolean accept(File dir, String name) { return name.endsWith(".java"); } }