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); } } } }