IO概述:
当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。
当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。因此我们把这种输入和输出动作称为IO操作。
File类:
构造函数:

public class Demo01 {
public static void main(String[] args) {
//将文件封装为File对象
//第一种方式
File file=new File("D:\io0803\demo01.txt");
System.out.println(file);
//2:第二种方式比第一种方式灵活
File file2=new File("D:\io0803","demo01.txt");
System.out.println(file2);
//3:最为灵活
File parent=new File("D:\io0803");
File file3=new File(parent,"demo01.txt");
System.out.println(file3);
//与系统有关的路径分隔符
System.out.println(File.pathSeparator);//可以自动识别当前的系统,linux是:
//与系统有关的默认名称分隔符
System.out.println(File.separator);//linux
}
}
此方法不会判断此文件是否存在。
File类的获取:

public class Demo02 {
public static void main(String[] args) {
File file=new File("D:\io0803\demo01.txt");
//获取绝对路径
String path=file.getAbsolutePath();
System.out.println("绝对路径:"+path);
//获取路径字符串
String path2=file.getPath();
System.out.println("路径字符串:"+path2);
//获取文件名
String name=file.getName();
System.out.println("文件名:"+name);
//获取文件大小
long len=file.length();
System.out.println("文件长度:"+len);
//文件以字节存储,所以类型是long
}
}
文件和文件夹的创建与删除:

public class Demo03 {
public static void main(String[] args) throws IOException {
method04();
}
//创建文件
public static void method01() throws IOException{
//描述要创建的文件
File file=new File("D:\io0803\demo01.txt");
//创建文件(不能创建文件夹)
//当文件已存在不能创建
boolean f=file.createNewFile();
System.out.println(f);
}
//删除文件
public static void method02(){
//明确要删除文件的路径
File file=new File("D:\io0803\aa");
//删除文件(既可以删除文件也可以删除文件夹),删除多级文件夹只能从后面一个文件夹一个文件夹的删除。
boolean flag=file.delete();
System.out.println(flag);
}
//判断文件
public static void method03(){
File file=new File("D:\io0803\demo01.txt");
//是否存在
System.out.println(file.exists());
//是否是文件夹
System.out.println(file.isDirectory());
//是否是文件
System.out.println(file.isFile());
}
//创建文件夹
public static void method04(){
File file=new File("D:\io0803\a\b\c\d\e");
//创建
file.mkdir();
//创建多级目录
file.mkdirs();
}
}
ListFile()方法:

public class Demo04 {
public static void main(String[] args) {
File file=new File("D:\io0803");
//获取该目录文件下的所有文件夹名称组成的String 数组
/*String files[]=file.list();
for(String f:files){
System.out.println(f);
}*/
//获取该目录下的所有文件或文件夹对象组成的File数组
File[] files=file.listFiles();
for(File f:files){
System.out.println(f);
}
}
}
文件过滤器:
接口:
FileFilter 用于抽象路径名的过滤器
FileFilter 过滤器中的accept方法接受一个参数,这个参数就当前文件或文件夹对象,当我们想对当前文件或文件夹进行过滤,就可以使用FileFilter ,比如需要当前目录下的所有文件夹,就可以使用FileFilter 过滤器。

代码:
import java.io.File; import java.io.FileFilter; //文件过滤器 public class MyFileFilter implements FileFilter{ public boolean accept(File pathname) { //过滤应该过滤什么条件下的文件 //筛选以.txt结尾的文件 //获取文件名 /*String name=pathname.getName(); //将文件名转小写 name=name.toLowerCase(); //判断后缀 boolean flag=name.endsWith(".txt"); return flag;*/ return pathname.getName().toLowerCase().endsWith(".txt"); } }
public class Demo01 { public static void main(String[] args) { //筛选io0803下的所有.txt文件 File file=new File("D:\io0803"); //筛选文件 File[] files=file.listFiles(new MyFileFilter()); for(File f:files){ System.out.println(f); } } }
递归:
指在当前方法内调用自己的现象。
递归分为直接递归和间接递归。
递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。
public class Demo01 { public static void main(String[] args) { int num = get(5); System.out.println(num); int nn=add(5); System.out.println(nn); System.out.println(sum(6)); } // 用递归计算1-5的和 public static int get(int n) { if (n == 1) { return 1; } return n + get(n - 1); } //用递归计算5的阶乘 public static int add(int n){ if(n==1){ return 1; } return n*add(n-1); } //斐波那契数列 public static int sum(int n){ if(n==1){ return 1; } if(n==2){ return 1; } return sum(n-1)+sum(n-2); } }
递归打印所有文件和文件夹:
public class Demo02 { public static void main(String[] args) { get(new File("D:\io0803")); } //参数代表要遍历的文件夹路径 public static void get(File file){ System.out.println("===="+file+"===="); //获取当前文件夹中的所有文件和文件夹组成的File数组对象 File[] files=file.listFiles(); //遍历取到每一个File对象 for(File f:files){ //判断是否是文件夹 if(f.isDirectory()){ //继续获取该文件夹下的所有文件和文件夹 get(f); }else{ //只要是文件就打印输出 System.out.println(f); } } } }
递归打印指定的文件:
public class Myfilter implements FileFilter{ public boolean accept(File pathname) { //如果该文件是文件夹,直接true if(pathname.isDirectory()){ return true; } return pathname.getName().toLowerCase().endsWith(".txt"); } } public class Demo03 { public static void main(String[] args) { get(new File("D:\io0803")); } //参数代表要遍历的文件夹路径 public static void get(File file){ //获取当前文件夹中的所有文件和文件夹组成的File数组对象 File[] files=file.listFiles(new Myfilter()); //遍历取到每一个File对象 for(File f:files){ //判断是否是文件夹 if(f.isDirectory()){ //继续获取该文件夹下的所有文件和文件夹 get(f); }else{ //只要是文件就打印输出 System.out.println(f); } } } }