File类

I/o相关——>输入输出 流(数据流动)
数据流动方向:读数据input 写数据output
文件流,字符流,对象流,网络流…

  • 1.什么叫文件?
    一种电脑的存储形式;
    文件有不同的格式:.txt .doc .ppt .mp4 .jpg .rar …
    文件夹?—目录,路径,不算文件
    File—>与电脑上的文件或文件夹产生一一对应的映射关系。
  • 2.什么叫文件流?做什么?
    读取文件中的内容 向文件中写内容
    文件输入流 文件输出流
    字节型文件输入流 字节型文件输出流
    字符型文件输入流 字节型文件输出流

一、File类

1.java.io中。

2.文件或目录路径名的抽象形式。

3.File与真实硬盘中的文件或文件夹,不是一个东西

File是在内存中的一个对象<——映射——>硬盘上的文件或文件夹

4.File类中的常用的方法:

  • (1)File file=new File(“D://test//test.txt”);通过路径构造对象,test是真实存在的。
    如果文件不是真实存在的:File file=new File(“D://test//b.txt”);

File对象 是真正的文件么?不是
fiel对象 队内存中 创建出来的一个对象空间
路径是看创建的对象 是否能与硬盘中的一个真实文件产生对应的有映射关系
所以虽然文件不存在,但是并不影响我们创建对象,只不过映射关系不存在而已,因为硬盘上没有那个文件。

  • (2)canRead(); canWrite(); isHidden(); isFile(); isDirectory();
System.out.println(file.canExecute());//是否可执行
System.out.println(file.canRead());//是否可执行
System.out.println(file.canWrite());//是否可执行
System.out.println(file.isHidden());//是否可执行
System.out.println(file.isFile());//是否可执行
System.out.println(file.isDirectory());//是否可执行
  • (3)length(); 获取文件中字节的个数:
    long l=file.length();
  • (4)lastModified(); 获取文件最后的修改时间——>毫秒值
long time=file.lastModified();//获取文件最后修改时间
Date date=new Date(time);
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd  KK:mm:ss");
System.out.println(sdf.format(date));
  • (5)String path=getAbsolutePath(); 获取文件的绝对路径:D://test//Test.txt
    String name=getName(); 获取文件的名字:Test.txt
File file=new File("E:\\test\\Test.txt");
String name=file.getName();
//文件的名字   Test.txt
String path=file.getAbsolutepath();
//文件的绝对路径  D://test//Test.txt
System.out.println(name);
System.out.println(path);

绝对路径<---->相对路径
绝对路径可以通过完整的字符串 定位盘符 文件夹 文件
相对路径没有盘符的写法 当前工程(项目)所在的位置找寻

  • (6)boolean =createNewFile(); 创建新的文件
//创建一个file对象
File  file=new File("D://test//abc.txt");
//通过这个对象  回头在硬盘上  创建文件
//必须处理异常  才能file.createNewFile(),  因为你要创建文件,盘符写错,就失败了,所以一定处理异常
try{
	boolean  value=file.createNewFile();//编译时异常
	System.out.println(value);
}catch(IOException e){
	e.printStackTrace();
}

boolean = mkdir :创建新的文件夹,外层没有,不能创建
boolean = mkdirs :创建新的文件夹 外层没有 可以自动创建

//创建一个 新的file对象
File file=new  File("D://test//bbb/inner");
//在硬盘上  创建一个新的文件夹
//boolean  value=file.mkdir();//外层(父元素)需要真实 存在
boolean  value=file.mkdirs();//可以创建文件夹,如果外层没有  也会同时创建
System.out.println(value);
  • (7)String pname=getParent();获取当前file的父亲file名字
    File file=getParentFile(); 获取当前file的父类file对象
    String[] names=list(); 获取当前file的所有儿子名字
    File[] files=listFiles(); 获取当前file的所有儿子对象
File file=new File("D://test//aaa");
//数组对象为空   证明当前的file是一个文件
//数组对象不为空  证明当前的file是一个文件夹
//数组对象的长度不为o   证明当前的file是一个不为空的文件夹  文件夹内有元素
File[]  files=file.listFiles();
System.out.println(files.length);
  • (8)boolean =delete(); 删除文件(任何一个文件)或空的文件夹,不能删除带元素的文件夹。

常用方法:
canRead(); canWrite(); isHidden; length; lastModifered; isFile; isDirectory;
getAbsolutePath(); getName();
绝对路径——相对路径(工程的根目录去找)
createNewFile(); mkdir(); mkdirs();
File=getPatentFile(); getParent();
File[] =listFiles(); list();
delete();

二、文件夹遍历删除(递归)

  • 1.文件夹的遍历—需要一个递归
    看看文件夹中有什么。
    普通函数的调用:
public void testone(){
	this.testTwo();
	System.out.println("我是testOne方法");
}
public void  testTwo(){
	this.testTwo();
	System.out.println("我是testTwo方法");
}
public void testThree(){
	System.out.println("我是testThree方法");
}
public static void main(String[] args){
	//加载TestMethod类的过程
	TestMethod tm=new TestMethod();\
	tm.testOne();//调用testOne让其执行一遍---->栈内存中  临时
}

执行思想:主方法中执行这句代码tm.testOne(); testOne方法中的第一句是调用了testTwo方法,所有先执行testTwo方法,testTwo方法的第一句又是执行testThree方法,所以先执行testThree方法,输出我是testThree方法,相当于testThree方法执行完毕,等于testTwo中的第一句this.testTwo();执行完毕,执行第二句:System.out.println(“我是testTwo方法”);,输出我是testTwo方法,至此testTwo方法执行完毕,等于testOne中的this.testTwo();这句代码执行完毕,执行下一句:System.out.println(“我是testone方法”):输出我是testone方法。

  • 内存当中的执行过程:
    在这里插入图片描述

首先默认方法区中加载类模板;类模板有三个方法。
new TestMethod(); 堆内存中加载类模板。
TestMethod tm栈内存中申请空间tm,指向堆内存的类模板。
tm.testOne(); 调用testOne让其执行一遍---->栈内存中,临时开辟一块红色空间。
第一件事调用testTwo方法,所以临时给testTwo开辟蓝色空间,但是由于testOne还没有执行完毕,所以空间没有释放。
然后testTwo方法调用testThree方法,蓝色调用紫色,所以又开辟了紫色空间。

  • 循环和递归:
    在这里插入图片描述
  • 循环:
//设计一个方法  描述盖宝塔
public void buildTower(int floor){//5
	for(int i=1;i<=floor; i++){
		System.out.println("盖到第"+floor+“层宝塔啦”);
	}
}
  • 递归:
//递归的想法
//想让我做事(盖第五层)我要求让别人把之前的事情做完
//  1.让别人先做事
//  2.我自己做事
public void buildTower(int floor){//5
	//判断当前floor是否为1  若不是找一个别人先盖之前层
	if(floor>1){
		this.buildTower(floor-1);
	}
	//我自己做事
	System.out.println("盖到第"+floor+“层宝塔啦”);
}
  • 递归盖宝塔的过程:
    在这里插入图片描述

方法区先加载类模板。new一个对象,在堆内存中。栈内存中tm指向堆内存的类模板,调用方法让方法执行,在栈内存中开辟临时空间。先判断5>1调用,然后自己的执行的先等一下。调用就在开辟一个小空间,4>1,调用,自己的执行,也在等一下,以此类推,1>1不满足,执行自己的方法,输出1层,相当于2的调用执行完毕,可以执行2自己的输出2层,表示3的调用执行完毕,可以执行3的自己的输出了,输出3层,等于4的调用执行完毕,可以执行4自己的输出,表示的5调用执行完毕,可以执行5的调用自己的输出,输出5层。

  • 遍历文件的代码:
//设计一个方法  用来展示(遍历)文件夹
//参数  ---> file(代表文件或文件夹)
public void showFile(File  file){//D://test 文件夹
	//判断如果file是一个文件夹  文件夹内有元素  找一个人先做
	//获取file的子元素  files==null是个文件  files!=null 是个文件夹  files.length!=0 是一个带元素的文件夹
	File[] files=file.listFiles();//test文件夹所有子元素
	if(files!=null  && files.length !=0){\
		for(File f : files){//每一个子元素都找人遍历
			this.showFile(f);//循环第一次test文件夹中的aaa   循环第二次 test->bbb  循环第三次 Test.txt
		}
	}
	//做自己的显示(file是文件或file是一个空的文件夹)
	system.out.println(file.getAbsolutePath);

}

public static void main(String[] args){
	NewTestFile ntf=new newTestFile();
	File file=new File("D://test");
	ntf.showFIle(file);
}

运行过程:
在这里插入图片描述
红色是执行的过程。

  • 2.文件夹的删除----需要一个递归
//设计一个方法  删除文件夹
// 参数  file
public void deletefile(File file){
	//判断file不是空文件夹  找人先做事
	File[] files=file.listFiles();
	if(files!=null && files.length !=0){
		for(File  f:files){
			this.deleteFile(f);
		}
	}
	//删除file  (file是个文件或file是一个空文件夹)
	file.delete();
}

public static void main(String[] args){
	NewTestFile  ntf=new  NewTestFile();
	File  file=new  File("D://test");
	ntf.deleteFile(file);
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值