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