I/O流的相关知识

1.I/O流:输出(output):从程序向外输出数据,输入(input):从外面向程序拿数据
2.java中把文件或者目录(文件夹)都封装成File(目录、文件、路径)对象
3.与系统有关的路径分隔符:File.pathSeparator(;);window上的;就是;但是在linux上的;是:所以需要直接写.pathSeparator()方法来定义分隔符'
4.与系统有关的名称分隔符:File.separetor();window上的就是但是在linux操作系统上的是/所以用.separetor()方法代替避免linux运行出错
5.把文件或者文件夹封装成一个File对象:
把f盘的a.txt文件转成file对象:File file=new File(F:\demo0611\a.txt);
把父目录和子目录都封装成单独的对象,这样可以灵活调用:File file=new File("F:\demo0611","a.txt")根据自己需求可以灵活换取父目录和子目录
把父目录封装成一个file对象,再加上子目录;File file=new File(new File(F:\demo0611),"a.txt")
获取file对象的绝对路径:String abpath=file.getAbsolutepath() file方法不能判断对象是否存在,如果是相对路径就会自动拼接当前路径,如果是绝对路径那么就是绝对路径
获取文件名:String filename=file.getName(); 获取路径:String filepath=file.getpath(); 获取文件大小:file.length()
创建文件对象:1.先把要创建的文件的地址封装成一个file对象,在用file对象调用createnewfile()创建文件/
可创建:.txt.jpg.zip文件.createnewfile()方法创建的文件如果该文件已存在就不能再创建
File file=new File("F:\demo0611\a.txt"); file.createnewfile();创建文件
File文件不能判断文件是否存在(主要是获取文件路径)但是可以通过.exists()方法来判断文件是否存在;返回值是布尔型:存在是true;不存在是false
删除文件或者文件夹(删除文件夹就是在封装file地址对象时不加文件扩展名)file.delete()就是封装的file对象调用delete()方法来删除对象
创建文件夹一般用.mkdirs()方法来创建,这个可创建一个文件夹也可创建多级文件夹
File file=new File("f:\demo0611\a\b\c\d"); file.mkdirs()
判断是否是文件:file.isDirectory(); 判断是否是文件夹:file.isFile();
获取一级目录下的文件的文件名: File file=new File("F://demo0611")获取demo0611文件夹下所有的文件名:
String[] files=file.list();增强for遍历:for(String s:files){sysout.out.println(s)};这个遍历只能获取一级目录下的所有文件名,可操作性差
获取当前目录下的所有文件和文件夹的地址集合File[]: File[] files2=file.listFile()
通过增强for获取文件的地址然后通过各种方法获取文件名,文件大小,文件地址'
for(File f:files2){ 获取地址:systen.out.println(f);获取文件名:system.out.println(f.getName()); 获取文件大小:system.out.println(f.length())s
2.递归:自己调用自己(异常:内存溢出);写递归必须要有出口不然没有意义,会报异常.构造方法不能用递归;递归次数不能过多不然报内存溢出异常
3.遍历多级文件夹:public static void get(File file){ 这里是循环打印,先打印父类名再打印子类名;因为是自己调用自己所以循环打印
获取改目录下的文件和文件夹的地址封装成一个File数组;File[] files=file.listFiles();在这里的括号里面可以加过滤器进行过滤,拿到自己想要的文件
//遍历:for(File f:file){if(f.isDirectory()(这里是判断如果是文件夹就继续掉用get(f)方法自己调用自己;.isDirectory()是判断是否文件夹的方法){get(f)else{system.out.println(f)(如果不是文件夹就输出打印)}}}
4.因为需要对传递过来的File对象进行过滤判断然后才能封装到File[]数组中;那么我们就需要用到FileFilter接口实现;因为FileFilter接口没有可实现的子类就不能多态‘ 所以就需要自己写一个实现类重写accept方法进行过滤
public boolean accept(File pathname){if(pathname.isdirectory()){return true(过滤条件:如果是文件夹就直接返回,不然就不能遍历到二级文件夹里面的符合条件的文件了)}}
先获取文件名 String name=pathname.geiName();将文件名转小写:name=name.tolowercase();返回判断后的布尔值 return name.endswith(".java");如果文件名是.java返回值是true不是就是false

原文地址:https://www.cnblogs.com/hankai2735/p/11438790.html