JAVA基础之File类
程序员文章站
2022-10-08 18:22:55
个人理解: File是个文件类,可以用其增加、删除、查找某种类型的文件或者文件夹,同时根据其成员变量的特点可以综合利用,避免出现跨系统的时候出现错误,并且查找时最好输入绝对路径,以免出现不存在的文件。使用递归时一定要主要好停止,以免栈内存溢出。 一、简述IO操作: 当需要把内存中的数据存储到持久化设 ......
个人理解:
file是个文件类,可以用其增加、删除、查找某种类型的文件或者文件夹,同时根据其成员变量的特点可以综合利用,避免出现跨系统的时候出现错误,并且查找时最好输入绝对路径,以免出现不存在的文件。使用递归时一定要主要好停止,以免栈内存溢出。
一、简述io操作:
当需要把内存中的数据存储到持久化设备上的这个动作称为输出(写)output操作;
当把持久设备上的数据读取到内存中的这个动作称为输入(读)input操作。
这个输入和输出的动作称为io操作。
二、file类:
1、文件类:
成员变量:
import java.io.file; public class demo01 { public static void main(string[] args) { //file类 //文件:file //目录(文件夹):directory //路径:path //路径分隔符(与系统有关的)<windows里面是 ; linux里面是 : > system.out.println(file.pathseparator); // ; //与系统有关的路径名称分隔符<windows里面是 \ linux里面是/ > system.out.println(file.separator); // \ } }
2、构造函数:
import java.io.file; public class demo02 { public static void main(string[] args) { file file=new file("d:\\java\\b.txt"); //双\\是转义 system.out.println(file); file file2=new file("d:\\java","a.txt");//父路径、子路径--可以适用于多个文件的! system.out.println(file2); file parent=new file("d:\\java"); file file3=new file(parent,"a.txt");//file类的父路径、子路径 system.out.println(file3); } }
3、file类的获取及文件的创建和删除、判断:
import java.io.file; import java.io.ioexception; public class demo03 { public static void main(string[] args) throws ioexception { method06(); } public static void method01(){ file file=new file("d:\\java\\a.txt"); //获取文件对象的绝对路径 system.out.println(file.getabsolutepath()); file file0=new file("src");//写相对路径的话,会自动转成绝对路径,但是不去检验文件是否真实存在(只会给翻译回来,可能根本不存在) d:\java0322\day16\src //获取文件对象的绝对路径 system.out.println(file0.getabsolutepath()); file file00=new file("aa");//这个根本不存在 d:\java0322\day16\aa //获取文件对象的绝对路径 system.out.println(file00.getabsolutepath()); //获取文件对象的文件名或者目录名 system.out.println(file.getname()); //获取文件对象的路径所对应的字符串 类似于tostring()方法 system.out.println(file.getpath()); //获取文件的大小(字节---long类型) system.out.println(file.length()); } //文件创建和删除 public static void method02() throws ioexception{ file file=new file("d:\\java\\d"); //创建文件 boolean flag=file.createnewfile();//都是创建的文件(最好都是加上后缀的),不能是文件夹 system.out.println(flag); } //文件删除 public static void method03(){ file file=new file("d:\\java\\d"); //删除文件(找不回来了) boolean flag=file.delete(); system.out.println(flag); } //文件判断 public static void method04(){ file file=new file("d:\\java\\a.txt"); //判断该文件对象所对应的文件是否存在 system.out.println(file.exists()); //判断该文件对象是否是文件夹 system.out.println(file.isdirectory()); //判断该文件对象是否是文件 system.out.println(file.isfile()); } //创建文件夹 public static void method05(){ file file=new file("d:\\java\\d.txt");//windows系统内文件夹名字不区分大小写,最后这个是文件夹的名字 boolean flag=file.mkdir(); system.out.println(flag); } //创建文件夹 public static void method06(){ file file=new file("d:\\java\\d\\a\\b");//mkdirs()用于创建多级目录,经常用的方法,不加s不能创建多级目录 boolean flag=file.mkdirs(); system.out.println(flag); } }
4、listfiles()方法介绍
import java.io.file; public class demo04 { public static void main(string[] args) { method03(); } public static void method01(){ file file=new file("d:\\java"); //获取该路径下的文件和文件夹 string[] arr=file.list(); //遍历 for(string s:arr){ system.out.println(s);//返回文件的全部的名字 } } public static void method02(){ file file=new file("d:\\java"); //获取该路径下的文件和文件夹所对应的文件对象 file[] files=file.listfiles(); for(file f:files){ system.out.println(f);//获得的其绝对路径---根本方法 } } }
需要注意的是:
①、指定的目录也就是文件夹必须存在;
②、指定的必须是目录。否则会空指针。
4、文件过滤器:
filefilter 与filenamefilter都是接口:
public static void method03(){ file file=new file("d:\\java"); //获取该路径下的文件和文件夹所对应(括号内为条件,也就是某个类型)的文件对象 file[] files=file.listfiles(new myfilefilter()); for(file f:files){ system.out.println(f);//获得的其绝对路径---根本方法 } }
import java.io.file; import java.io.filefilter; //过滤器: public class myfilefilter implements filefilter{ public boolean accept(file pathname) { /*//获取文件名 string filename=pathname.getname(); //判断文件名是否以.txt结尾 boolean flag=filename.endswith(".txt"); return flag; */ return pathname.getname().endswith(".txt"); } }
三、递归:
在当前方法内调用自己的现象
//递归 public class demo01 { public static void main(string[] args) { int sum=get(100); system.out.println(sum); } //用递归计算1-100的和 public static int get( int num){ if(num==1){ return 1; } return num +get(num-1); } }
import java.io.file; public class demo02 { public static void main(string[] args) { file file=new file("d:\\java"); look(file); } public static void look(file file){ //获取该路径下所有的文件夹和文件 file[] files=file.listfiles(new myfilter());//获得.txt文件和文件夹 //遍历 for(file f:files){ //如果是文件夹则继续寻找 if(f.isdirectory()){ look(f); }else{//如果不是则打印 system.out.println(f); } } } }
import java.io.file; import java.io.filefilter; public class myfilter implements filefilter { public boolean accept(file pathname) { //获取以.txt为后缀的文件 //如果是文件夹,那么放到file[]数组内 if(pathname.isdirectory()){ return true; } return pathname.getname().endswith(".java"); } }
需要注意的是:
1、要保证递归能够停下来;
2、递归次数不能太多;
3、构造方法不能递归使用。