IO流编程:
要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘或者U盘等)上!
当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作!
当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作!
因此我们把这种输入和输出动作称为IO操作!
File类的出现:
File文件和目录路径名的抽象表示形式!即Java中把文件或者目录(文件夹)都封装成File对象!也就是说如果我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可!
File类的构造函数:
越细分越灵活:
① 传一个父对象,后面传路径!
② 传入对象的路径(绝对路径针对于全电脑的,相对路径相对于工程内部)!
③ 传入父级路径,后面传入子路径!
File类的获取:
① getPath()拿到路径(即toString方法)!
② 返回文件或者文件夹的字节数大小!
③ getName()拿到文件名或者文件夹名!
文件或者文件夹的创建或删除:
ListFile()方法:
注意:在获取指定目录下的文件或者文件夹时必须满足下面两个条件
1;指定的目录必须是存在的!
2;指定的必须是目录。否则容易引发返回数组为NULL,出现NullPointerException!
课堂代码:
package com.oracle.demo01; import java.io.File; import java.io.IOException; //file类包含: //1:路径path //2:目录directory-->文件夹 //3:文件file //Windows系统是;号,Linux系统是:号路径分隔符! //Windows系统是号,Linux系统是/号名称分隔符! public class Demo01 { public static void main(String[] args){ method10(); } public static void method1() { //与系统有关的路径分隔符: System.out.println(File.pathSeparator); //与系统有关的名称分隔符: System.out.println(File.separator); } public static void method2(String Child) { //两个\是转义符! //实际的路径转化成一个抽象的对象! //File类构造方法不会检验该文件或该文件夹是否真实存在! //绝对路径! File file1=new File("F:\IOTest\TestA.txt"); //传参: File file2=new File("F:",Child); File file3=new File(new File("F:\IOTest"),Child); System.out.println(file2); } public static void method3() { File file1=new File("F:\IOTest\TestA.txt"); //拿到File对象的绝对路径: System.out.println(file1.getAbsolutePath()); //相对路径拿到的是本工程的路径: File file2=new File("src"); System.out.println(file2.getAbsolutePath()); } public static void method4() { //获取本路径目录名或者文件名: File file1=new File("F:\IOTest\TestA.txt"); System.out.println(file1.getName()); //getPath和toString方法一个作用: System.out.println(file1.getPath()); //返回文件(针对于文件)的长度Long类型(字节数) System.out.println(file1.length()); //找个大一点的文件来看Length: File file2=new File("D:\Program Files\360DrvMgr\feedback\360ScreenCapture.exe"); System.out.println(file2.length()); } public static void method5() throws IOException { //创建文件(只能创建文件,不能创建文件夹): File file1=new File("F:\IOTest\TestB.txt"); boolean IsSucc=file1.createNewFile(); System.out.println(IsSucc); } public static void method6() throws IOException { //创建文件夹: File file1=new File("F:\IOTest\TestDir"); //mkdirs多级目录,mkdir单级目录! boolean IsSucc=file1.mkdirs(); System.out.println(IsSucc); } public static void method7() { File file1=new File("F:\IOTest\TestB.txt"); //删除该文件夹(或文件),直接从硬盘删除,不走回收站,删除需谨慎: boolean IsSucc=file1.delete(); System.out.println(IsSucc); } public static void method8() { File file1=new File("F:\IOTest\TestB.txt"); //先判断file对象表示文件或文件夹是否真实存在: boolean flagex=file1.exists(); //判断file对象是否是一个目录: boolean flagdi=file1.isDirectory(); //判断file对象是否是一个文件: boolean flagfi=file1.isFile(); } public static void method9() { //获取该文件夹下所有文件或文件夹的字符串名称: File file1=new File("F:\IOTest"); //存进String数组: String[] files=file1.list(); //增强for遍历: for(String Str:files) { File file=new File(file1,Str); if(file.getName().equals("TestA.txt")) { boolean flag=file1.delete(); System.out.println(flag); } } } public static void method10() { //返回File[]的listFiles()方法: File file1=new File("F:\IOTest"); File[] files=file1.listFiles(); //对象或者容器去调用方法,如果为NULL,会报空指针异常! for(File Str:files) { System.out.println(Str); } } }
上午作业1:
package com.oracle.homework; import java.io.File; public class HW1 { public static void main(String[] args) { //调用统计文件大小的方法: getSize("F:\GameDownload\LOL_V4.1.0.1_FULL.exe"); } //统计文件大小的方法: public static void getSize(String fileName) { File file=new File(fileName); boolean flag=file.exists(); if(flag) { boolean IsFi=file.isFile(); if(IsFi) { System.out.println(file.length()); }else { System.out.println("这不是一个文件,请重新输入!"); } }else { System.out.println("该文件不存在,请重新输入!"); } } }
上午作业2:
package com.oracle.homework; import java.io.File; public class HW2 { public static void main(String[] args) { //调用方法: deleteDir("F:\IOTest"); } //定义删除文件夹的方法: public static void deleteDir(String dirName) { File file=new File(dirName); boolean flag=file.exists(); if(flag) { boolean IsDir=file.isDirectory(); if(IsDir) { //将内部文件都存进File数组: File[] fileArr=file.listFiles(); if(fileArr!=null) { //遍历把该文件夹下内容都删掉: for(File Str:fileArr) { Str.delete(); System.out.println("该文件夹内部文件:"+Str+"删除成功!"); } boolean IsSucc=file.delete(); String Mess=(IsSucc?"删除文件夹成功!":"删除文件夹失败!"); System.out.println(Mess); }else { boolean IsSucc=file.delete(); String Mess=(IsSucc?"删除文件夹成功!":"删除文件夹失败!"); System.out.println(Mess); } System.out.println(); }else { System.out.println("这不是一个文件夹,请重新输入!"); } }else { System.out.println("该文件夹不存在,请重新输入!"); } } }
文件过滤器:
//该方法有点过时了:可以使用listFiles(FileFilter filter)返回一个File[]数组,然后通过实现FileFilter接口的类重写accept方法,来进行筛选!
递归:
递归分为两种,直接递归和间接递归:
① 直接递归称为方法自身调用自己!
② 间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法!
注意:递归一定要有条件限定,保证递归能够停止下来(留有程序的出口),否则会发生栈内存溢出,在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出!
课堂示例代码1:
package com.oracle.demo01; import java.io.File; //Windows不区分大小写! public class Demo02 { public static void main(String[] args) { File file=new File("F:\IOTest"); //listFilter调用MyFilter内的accept过滤器: File[] files=file.listFiles(new MyFilter()); for(File Str:files) { System.out.println(Str); } } } package com.oracle.demo01; import java.io.File; import java.io.FileFilter; //实现文件过滤器FileFliter: public class MyFilter implements FileFilter { public boolean accept(File pathname) { //返回.java文件结尾的文件: //String name=pathname.getName().toLowerCase(); //boolean flag=name.endsWith(".java"); //return flag; return pathname.getName().toLowerCase().endsWith(".java"); } }
递归的演示:
package com.oracle.demo01; import java.io.File; //获取某目录下所有的文件: public class Demo03 { public static void main(String[] args) { File file=new File("F:\IOTest"); getAllFiles(file); } //递归:自己调用自己! public static void getAllFiles(File file) { File[] files=file.listFiles(); for(File Str:files) { if(Str.isDirectory()) { getAllFiles(Str); }else { System.out.println(Str); } } } }
递归求1-N的和:
package com.oracle.demo01; public class Demo04 { //递归:要运行的方法主体不变,而参与运行的方法参数会变! //递归必须要写一个程序的出口,否则该程序没有意义! public static void main(String[] args) { //getNum(100); System.out.println(getNum(100)); } //用递归计算1-100的和: //一直调用,直到有值为止,再返回去! public static int getNum(int num) { if(num==1) { //return返回给调用者 return 1; } return num+getNum(num-1); } }
递归寻找文件夹中.java结尾的文件(含子目录):
package com.oracle.demo01; import java.io.File; //挑选.java文件,包含子目录: public class Demo05 { public static void main(String[] args) { getAllFile(new File("F:\IOTest")); } public static void getAllFile(File file) { File[] files=file.listFiles(new YourFilter()); for(File Str:files) { if(Str.isDirectory()) { getAllFile(Str); }else { System.out.println(Str); } } } } package com.oracle.demo01; import java.io.File; import java.io.FileFilter; public class YourFilter implements FileFilter { public boolean accept(File pathname) { //是文件夹直接return true! if(pathname.isDirectory()) { return true; } return pathname.getName().toLowerCase().endsWith(".java"); } }
下午作业1:
package com.oracle.homework; import java.util.Scanner; //用户输入数字N,求出N的阶乘! public class HW3 { public static void main(String[] args) { System.out.println("请输入一个数字:"); @SuppressWarnings("resource") Scanner Scan=new Scanner(System.in); int Num=Scan.nextInt(); System.out.println(Num+"的阶乘为:"+getNFactorial(Num)); } public static int getNFactorial(int Num) { if(Num==1) { return 1; } return Num*getNFactorial(Num-1); } }
下午作业2:
package com.oracle.homework; import java.io.File; //搜索指定目录中的.java文件(含子目录): public class HW4 { public static void main(String[] args) { //调用getAllJava方法: getAllJava(new File("F:\IOTest")); } public static void getAllJava(File file) { File[] files=file.listFiles(new OurFilter()); for(File Str:files) { if(Str.isDirectory()) { getAllJava(Str); }else { System.out.println(Str); } } } } package com.oracle.homework; import java.io.File; import java.io.FileFilter; //实现FileFilter接口并重写accept方法: public class OurFilter implements FileFilter { public boolean accept(File pathname) { if(pathname.isDirectory()) { return true; } return pathname.getName().toLowerCase().endsWith(".java"); } }
package com.oracle.homework;
import java.io.File;
//搜索指定目录中的.java文件(含子目录):
public class HW4 {
public static void main(String[] args) {
//调用getAllJava方法:
getAllJava(new File("F:\IOTest"));
}
public static void getAllJava(File file) {
File[] files=file.listFiles(new OurFilter());
for(File Str:files) {
if(Str.isDirectory()) {
getAllJava(Str);
}else {
System.out.println(Str);
}
}
}
}
package com.oracle.homework;
import java.io.File;
import java.io.FileFilter;
//实现FileFilter接口并重写accept方法:
public class OurFilter implements FileFilter {
public boolean accept(File pathname) {
if(pathname.isDirectory()) {
return true;
}
return pathname.getName().toLowerCase().endsWith(".java");
}
}