IO流编程:
要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘或者U盘等)上!
当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作!
当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作!
因此我们把这种输入和输出动作称为IO操作!
File类的出现:
File文件和目录路径名的抽象表示形式!即Java中把文件或者目录(文件夹)都封装成File对象!也就是说如果我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可!
File类的构造函数:
越细分越灵活:
①传一个父对象,后面传路径!
②传入对象的路径(绝对路径针对于全电脑的,相对路径相对于工程内部)!
③传入父级路径,后面传入子路径!
File类的获取:
① getPath()拿到路径(即toString方法)!
② 返回文件或者文件夹的字节数大小!
③ getName()拿到文件名或者文件夹名!
文件或者文件夹的创建或删除:
ListFile()方法:
注意:在获取指定目录下的文件或者文件夹时必须满足下面两个条件
1;指定的目录必须是存在的!
2;指定的必须是目录。否则容易引发返回数组为NULL,出现NullPointerException!
课堂代码:
packagecom.oracle.demo01;importjava.io.File;importjava.io.IOException;//file类包含://1:路径path//2:目录directory-->文件夹//3:文件file//Windows系统是;号,Linux系统是:号路径分隔符!//Windows系统是\号,Linux系统是/号名称分隔符!
public classDemo01 {public static voidmain(String[] args){
method10();
}public static voidmethod1() {//与系统有关的路径分隔符:
System.out.println(File.pathSeparator);//与系统有关的名称分隔符:
System.out.println(File.separator);
}public static voidmethod2(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 voidmethod3() {
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 voidmethod4() {//获取本路径目录名或者文件名:
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() throwsIOException {//创建文件(只能创建文件,不能创建文件夹):
File file1=new File("F:\\IOTest\\TestB.txt");boolean IsSucc=file1.createNewFile();
System.out.println(IsSucc);
}public static void method6() throwsIOException {//创建文件夹:
File file1=new File("F:\\IOTest\\TestDir");//mkdirs多级目录,mkdir单级目录!
boolean IsSucc=file1.mkdirs();
System.out.println(IsSucc);
}public static voidmethod7() {
File file1=new File("F:\\IOTest\\TestB.txt");//删除该文件夹(或文件),直接从硬盘删除,不走回收站,删除需谨慎:
boolean IsSucc=file1.delete();
System.out.println(IsSucc);
}public static voidmethod8() {
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 voidmethod9() {//获取该文件夹下所有文件或文件夹的字符串名称:
File file1=new File("F:\\IOTest");//存进String数组:
String[] files=file1.list();//增强for遍历:
for(String Str:files) {
File file=newFile(file1,Str);if(file.getName().equals("TestA.txt")) {boolean flag=file1.delete();
System.out.println(flag);
}
}
}public static voidmethod10() {//返回File[]的listFiles()方法:
File file1=new File("F:\\IOTest");
File[] files=file1.listFiles();//对象或者容器去调用方法,如果为NULL,会报空指针异常!
for(File Str:files) {
System.out.println(Str);
}
}
}
上午作业1:
packagecom.oracle.homework;importjava.io.File;public classHW1 {public static voidmain(String[] args) {//调用统计文件大小的方法:
getSize("F:\\GameDownload\\LOL_V4.1.0.1_FULL.exe");
}//统计文件大小的方法:
public static voidgetSize(String fileName) {
File file=newFile(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:
packagecom.oracle.homework;importjava.io.File;public classHW2 {public static voidmain(String[] args) {//调用方法:
deleteDir("F:\\IOTest");
}//定义删除文件夹的方法:
public static voiddeleteDir(String dirName) {
File file=newFile(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:
packagecom.oracle.demo01;importjava.io.File;//Windows不区分大小写!
public classDemo02 {public static voidmain(String[] args) {
File file=new File("F:\\IOTest");//listFilter调用MyFilter内的accept过滤器:
File[] files=file.listFiles(newMyFilter());for(File Str:files) {
System.out.println(Str);
}
}
}packagecom.oracle.demo01;importjava.io.File;importjava.io.FileFilter;//实现文件过滤器FileFliter:
public class MyFilter implementsFileFilter {public booleanaccept(File pathname) {//返回.java文件结尾的文件://String name=pathname.getName().toLowerCase();//boolean flag=name.endsWith(".java");//return flag;
return pathname.getName().toLowerCase().endsWith(".java");
}
}
递归的演示:
packagecom.oracle.demo01;importjava.io.File;//获取某目录下所有的文件:
public classDemo03 {public static voidmain(String[] args) {
File file=new File("F:\\IOTest");
getAllFiles(file);
}//递归:自己调用自己!
public static voidgetAllFiles(File file) {
File[] files=file.listFiles();for(File Str:files) {if(Str.isDirectory()) {
getAllFiles(Str);
}else{
System.out.println(Str);
}
}
}
}
递归求1-N的和:
packagecom.oracle.demo01;public classDemo04 {//递归:要运行的方法主体不变,而参与运行的方法参数会变!//递归必须要写一个程序的出口,否则该程序没有意义!
public static voidmain(String[] args) {//getNum(100);
System.out.println(getNum(100));
}//用递归计算1-100的和://一直调用,直到有值为止,再返回去!
public static int getNum(intnum) {if(num==1) {//return返回给调用者
return 1;
}return num+getNum(num-1);
}
}
递归寻找文件夹中.java结尾的文件(含子目录):
packagecom.oracle.demo01;importjava.io.File;//挑选.java文件,包含子目录:
public classDemo05 {public static voidmain(String[] args) {
getAllFile(new File("F:\\IOTest"));
}public static voidgetAllFile(File file) {
File[] files=file.listFiles(newYourFilter());for(File Str:files) {if(Str.isDirectory()) {
getAllFile(Str);
}else{
System.out.println(Str);
}
}
}
}packagecom.oracle.demo01;importjava.io.File;importjava.io.FileFilter;public class YourFilter implementsFileFilter {public booleanaccept(File pathname) {//是文件夹直接return true!
if(pathname.isDirectory()) {return true;
}return pathname.getName().toLowerCase().endsWith(".java");
}
}
下午作业1:
packagecom.oracle.homework;importjava.util.Scanner;//用户输入数字N,求出N的阶乘!
public classHW3 {public static voidmain(String[] args) {
System.out.println("请输入一个数字:");
@SuppressWarnings("resource")
Scanner Scan=newScanner(System.in);int Num=Scan.nextInt();
System.out.println(Num+"的阶乘为:"+getNFactorial(Num));
}public static int getNFactorial(intNum) {if(Num==1) {return 1;
}return Num*getNFactorial(Num-1);
}
}
下午作业2:
packagecom.oracle.homework;importjava.io.File;//搜索指定目录中的.java文件(含子目录):
public classHW4 {public static voidmain(String[] args) {//调用getAllJava方法:
getAllJava(new File("F:\\IOTest"));
}public static voidgetAllJava(File file) {
File[] files=file.listFiles(newOurFilter());for(File Str:files) {if(Str.isDirectory()) {
getAllJava(Str);
}else{
System.out.println(Str);
}
}
}
}packagecom.oracle.homework;importjava.io.File;importjava.io.FileFilter;//实现FileFilter接口并重写accept方法:
public class OurFilter implementsFileFilter {public booleanaccept(File pathname) {if(pathname.isDirectory()) {return true;
}return pathname.getName().toLowerCase().endsWith(".java");
}
}
packagecom.oracle.homework;
importjava.io.File;
//搜索指定目录中的.java文件(含子目录):
publicclass
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");
}
}