java 基础对文件进行操作的类 File 类使用

java File 类

一、File的概念

Java.io包下代表平台无关的文件和目录。也就是说如果希望在程序中操作文件或目录都可以通过File类来完成。

File可以新建、删除、和重命名文件和目录。但****File不能访问文件本身****,如果需要访问文件内容,则需要 I/O。

File类的实例表示一个文件或者目录(文件夹)。

构造一个File实例****并不是创建这个目录或文件****,而是该路径的一个抽象,它可能真实存在也可能不存在。(就是指向这个文件或目录)。

二、相对路径和绝对路径

1、路径分类:绝对路径、相对路径

2、绝对路径:从根目录开始的路径,称为绝对路径 D:/dir1/xxx.txt

​ Windows系统中:盘符目录就是根目录,D:、E:

​ Linux系统中:/就是根目录,从/开始的路径就是绝对路径

3、相对路径:相对于某个路径而言的路径

​ 相对于不同的路径,同样的相对路径,表达的是不同的路径

​ Dos命令行中:相对于当前路径(Dos命令行所在的路径),a/b/c.txt

​ Eclipse中:相对于当前工程的根目录

三、File类的构造方法

File(String pathname) 通过将给定路径名字符串转换为抽象路径名来指向一个文件。
[File](#File(java.lang.String, java.lang.String))(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串指向一个文件。
[File](#File(java.io.File, java.lang.String))(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串指向一个文件。

*注意:*

起的类名不要用File,这样new File() 系统认为new的是自己手写的这个File类。

四、File类的常用方法

4.1 创建的方法

1、boolean 变量名=file的变量名. createNewFile():创建当前File对象所描述的路径的文件

Boolean值为true,说明创建成功,反之不成功。

.createNewFile()方法需要布尔型变量去接收。

2、boolean变量名=file的变量名. mkdir():创建当前File对象所描述的路径的文件夹(如果父级路径不存在,那么不会自动创建父级路径)

3、boolean 变量名=file的变量名. mkdir****s****():创建当前File对象所描述的路径的文件夹(如果父级路径不存在,那么自动创建父级路径)解释:可以同时创建不存在的多级文件夹
*注:mkdir一次只能创建一级目录,一次创建多级目录使用mkdirs()*

package day20;

import java.io.File;
import java.io.IOException;

public class caogao {

   public static void main(String[] args) {
   	
   	File f1 = new File("D:/dir/cc.docx");//创建Word文档,使用后缀.docx
   	boolean b;
   	try {
   		b = f1.createNewFile();	//创建Word文档
   		System.out.println("cc.docx文件是否创建成功:"+b);
   	} catch (IOException e) {
   		// TODO Auto-generated catch block
   		e.printStackTrace();
   	}
   	
   	File f2 = new File("D/dir3");	//原本是没有dir3这个文件夹(目录)的
   	boolean c = f2.mkdir();	//mkdir一次只能创建一个目录
   	System.out.println("dir3文件夹是否创建成功:"+c);
   	
   	File f3 = new File("D/dir4/aa");	//原本是没有dir3和aa文件夹(目录)的
   	boolean d = f3.mkdirs();	//mkdirs一次可创建多个目录
   	System.out.println("dir4和aa文件夹是否创建成功:"+d);
   }
}

运行结果:

cc.docx文件是否创建成功:true
dir3文件夹是否创建成功:true
dir4和aa文件夹是否创建成功:true

4.2 删除的方法

1、delete():删除调用者描述的文件或者文件夹

2、注意事项:

(1)delete在删除文件夹的时候,只能删除空文件夹

(2)delete方法不走回收站

package day20;

import java.io.File;

public class caogao01 {

	public static void main(String[] args) {
		File f1 = new File("D:/dir3");	//dir3 是空目录
		File f2 = new File("D:/dir4");	//dir4是 非空目录
		boolean b = f1.delete();
		boolean c = f2.delete();
		System.out.println("删除成功?:"+b);
		System.out.println("删除成功?:"+c);
	}
}

结果:

删除成功?:true
删除成功?:false

4.3 重命名

1、renameTo(File dest)

调用者是当前的文件或者文件夹的路径对象

参数是变化之后的文件或者文件夹的路径对象

2、注意事项:

​ 如果在同一个文件夹下,修改路径,就是重命名

如果在不同文件夹下,修改路径,就是剪切
package day20;

import java.io.File;

public class f {

	public static void main(String[] args) {
		File f1 = new File("D:/dir2/aa");  	//f1为文件夹
		File f11 = new File("D:/dir2/cc");  	//f11为文件夹
		
		File f2 = new File("D:/dir2/bb.docx");	//f2为office文件
		File f22 = new File("D:/dir2/ff.docx");	//f22为office文件

		boolean b = f1.renameTo(f11);
		boolean c = f2.renameTo(f22);
		
		System.out.println("aa改名cc成功?:"+b);
		System.out.println("bb.docx改名ff.docx成功?:"+c);
		
		File f3 = new File("D:/tt.txt");
		File f33 = new File("C:/aa.txt");
		
		boolean d = f3.renameTo(f33);
		System.out.println("D:/tt.txt移动并改名到E:/aa.txt  成功?"+d);
	}

}

结果:

aa改名cc成功?:true
bb.docx改名ff.docx成功?:true
D:/tt.txt移动并改名到E:/aa.txt 成功?false

注意:

(1)扩展名

(2) 如果跨盘符卷移动一个文件夹,移不动

*4.4 判断功能的方法*

(1)exists():判断当前调用者File对象,是否存在

(2)isFile():判断当前调用者File对象,是否是文件

(3)isDirectory():判断当前调用者File对象,是否是文件夹

package day20;

import java.io.File;

public class lei {

	public static <f2> void main(String[] args) {
		File f1 = new File("D:/dir/a1.txt");
		boolean b = f1.exists(); // 判断对象f1是否存在
		boolean c = f1.isFile(); // 判断对象f1是否是文件夹
		boolean d = f1.isDirectory();// 判断对象f1是否是文件夹
		System.out.println("判断对象f1是否存在:" + b);
		System.out.println("判断对象f1是否是文件夹" + c);
		System.out.println("判断对象f1是否是文件夹" + d);
	}
}

结果:

判断对象f1是否存在:true
判断对象f1是否是文件夹true
判断对象f1是否是文件夹false

*4.5 获取功能的方法*

1、getAbsolutePath():获取当前File对象的绝对路径

2、getPath():获取的就是在构造方法中封装的路径

3、getName():获取最底层的简单的文件或者文件夹名称(不包含所造目录的路径)

4、length():获取文件的字节个数(不指文件夹)

5、String[] list():获取当前文件夹下的所有文件和文件夹的名称,到一个字符串数组中

6、File[] listFiles():获取当前文件夹下的所有文件和文件夹的File对象,到一个File对象数组中

package day20;

import java.io.File;

public class lei {

   public static <f2> void main(String[] args) {
   	File f1 = new File("D:/dir/a1.txt");
   	boolean b = f1.exists(); // 判断对象f1是否存在
   	boolean c = f1.isFile(); // 判断对象f1是否是文件夹
   	boolean d = f1.isDirectory();// 判断对象f1是否是文件夹
   	System.out.println("判断对象f1是否存在:" + b);
   	System.out.println("判断对象f1是否是文件夹" + c);
   	System.out.println("判断对象f1是否是文件夹" + d);
   }
}

结果:

判断对象f1是否存在:true
判断对象f1是否是文件夹true
判断对象f1是否是文件夹false

package day20;

import java.io.File;

public class lei01 {

	public static void main(String[] args) {
		File f1 = new File("a.doc");
		File b = f1.getAbsoluteFile();	//获取f1的绝对地址
		String c  = f1.getPath();	//获取f1的封装地址
		String name = f1.getName(); //获取f1的文件名
		long l = f1.length();	//获取f1的文件字节数
		System.out.println(b);
		System.out.println(c);
		System.out.println(name);
		System.out.println(l);
		
	}

}

结果:

D:\soft\eclipse-workspace\day20\a.doc
a.doc
a.doc
0

*练习:*

*练习1:********检查文件是否存在,文件的创建*

描述:检查D盘下是否存在文件a.txt,如果不存在则创建该文件。

package day20;

import java.io.File;
import java.io.IOException;

/**
 * @author TaoTianye
 *题目:练习1:检查文件是否存在,文件的创建
描述:检查D盘下是否存在文件a.txt,如果不存在则创建该文件。
 */
public class lei04 {

	public static void main(String[] args) {
		File f1 = new File("D:/a.txt");
		boolean b = f1.exists();
		System.out.println("D盘下是否存在文件a.txt:    "+b);
		if(b) {
			System.out.println("D盘下a.txt文件已经存在");
		}else {
			try {
				boolean c = f1.createNewFile();
				System.out.println("D盘下a.txt文件不存在,现在已经创建,创建结果为:"+c);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}

}

结果:

D盘下是否存在文件a.txt: false
D盘下a.txt文件不存在,现在已经创建,创建结果为:true

*练习2:找出dir文件夹下以a开头的所有文件和文件夹*

提示:String类中有方法:

boolean startsWith()

boolean endsWith()

package day20;

import java.io.File;

/**
* @author TaoTianye
*找出dir文件夹下以a开头的所有文件和文件夹
提示:String类中有方法:
(1)startsWith()方法返回的值为布尔型 
  startsWith(String prefix) 
  测试此字符串是否以指定的前缀开头。
(2)endsWith()方法返回的值为布尔型	
  endsWith(String suffix) 
  测试此字符串是否以指定的后缀结尾。
*/
public class lei05 {

  public static void main(String[] args) {
  	File f1 = new File("D:/dir/");
  	File[] lf1 = f1.listFiles();
  	System.out.println("D盘下dir文件夹下以a开头的所有文件和文件夹如下:");
  	for(int i=0;i<lf1.length;i++) {
  		if(lf1[i].getName().startsWith("a")) {
  			
  			System.out.println(lf1[i]);
  		}
  	}
  	
  }

}

结果:

D盘下dir文件夹下以a开头的所有文件和文件夹如下:
D:\dir\a1.txt
D:\dir\a2.xlsx
D:\dir\a3.docx
D:\dir\a4.ppt
D:\dir\a5.pub
D:\dir\a6.zip
D:\dir\a7.txt
D:\dir\a8.txt
D:\dir\a9.xls

在这里插入图片描述

*练习3:找出dir文件夹下所有的txt文件*

package day20;

import java.io.File;

/**
 * @author TaoTianye
 *题目:找出dir文件夹下所有的txt文件
 */
public class lei06 {

	public static void main(String[] args) {
		File f1 = new File("D:/dir");
		File[] lfs1 = f1.listFiles();
		System.out.println("dir文件夹下所有的txt文件:");
		//查找后缀为.txt的文件,就是txt文件
		for(int i=0;i<lfs1.length;i++) {
			if(lfs1[i].getName().endsWith(".txt")) {
				System.out.println(lfs1[i]);
			}
		}

	}

}

结果:

dir文件夹下所有的txt文件:
D:\dir\a1.txt
D:\dir\a7.txt
D:\dir\a8.txt

*练习4:递归方式列出某个目录下的所有文件夹名和文件名*

package day20;

import java.io.File;

/**
* @author TaoTianye
*题目:递归方式列出某个(dir)目录下的所有文件夹名和文件名
*解释:各级文件夹下的文件都要打印出文件名
*/
public class lei07 {
   
   static int a = 1;	//静态变量记录递归次数

   public static void main(String[] args) {
   	File f1 = new File("D:/dir");
   	find(f1);
   }

   // find方法的目的:查找当级目录(文件夹)下的文件与目录(文件夹)
   public static void find(File f) {

   	System.out.println("第" + a++ + "次递归");// 方便查看每一次递归执行的行为

   	File[] lf = f.listFiles();// 查找出目录下当级目录下所有的文件与文件夹
   	for (int i = 0; i < lf.length; i++) {
   		if (lf[i].isFile()) {// 判断当级目录下的对象是否是文件
   			System.out.println("文件:" + lf[i]);// 如果是文件就打印
   		} else {
   			System.out.println("文件夹:" + lf[i]);// 如果是文件夹就打印
   			find(lf[i]);// 遇到文件夹就继续使用find方法查找这个文件夹下的文件与目录

   		}
   	}
   }
}

结果:

第1次递归
文件:D:\dir\a1.txt
文件:D:\dir\a2.xlsx
文件:D:\dir\a3.docx
文件:D:\dir\a4.ppt
文件:D:\dir\a5.pub
文件:D:\dir\a6.zip
文件:D:\dir\a7.txt
文件:D:\dir\a8.txt
文件:D:\dir\a9.xls
文件夹:D:\dir\文件夹1
第2次递归
文件:D:\dir\文件夹1\a1.txt
文件:D:\dir\文件夹1\a2.xlsx
文件:D:\dir\文件夹1\a3.docx
文件:D:\dir\文件夹1\a4.ppt
文件:D:\dir\文件夹1\a5.pub
文件:D:\dir\文件夹1\a6.zip
文件:D:\dir\文件夹1\a7.txt
文件:D:\dir\文件夹1\a8.txt
文件:D:\dir\文件夹1\a9.xls
文件夹:D:\dir\文件夹1\文件夹2
第3次递归
文件:D:\dir\文件夹1\文件夹2\a1.txt
文件:D:\dir\文件夹1\文件夹2\a2.xlsx
文件:D:\dir\文件夹1\文件夹2\a3.docx
文件:D:\dir\文件夹1\文件夹2\a4.ppt
文件:D:\dir\文件夹1\文件夹2\a5.pub
文件:D:\dir\文件夹1\文件夹2\a6.zip
文件:D:\dir\文件夹1\文件夹2\a7.txt
文件:D:\dir\文件夹1\文件夹2\a8.txt
文件:D:\dir\文件夹1\文件夹2\a9.xls

在这里插入图片描述
在这里插入图片描述

*练习5:递归方式清空某个目录*

在这里插入图片描述
在这里插入图片描述

package day20;

import java.io.File;

/**
 * @author TaoTianye
 *题目:递归方式清空某个(dir1)目录
 *解释:删除各级目录下的文件与目录(文件夹),只保留一级目录
 */
public class lei08 {

	static int a = 1;		//静态变量记录递归次数

	public static void main(String[] args) {
		File f = new File("D:/dir1");
		clear(f);
	}

	// clear方法:删除当前目录(文件夹)及其内部文件
	public static void clear(File f) {

		System.out.println("第" + a++ + "次递归"); // 方便查看每一次递归执行的行为

		File[] lf = f.listFiles();
		for (int i = 0; i < lf.length; i++) {
			if (lf[i].isFile()) {// 判断对象是否是文件
				lf[i].delete(); // 是文件,删除
				System.out.println("	文件" + lf[i] + "删除成功");
			} else {
				clear(lf[i]); // 继续删除下一个文件夹里的内容
				lf[i].delete(); // 是空文件夹,就删除
				//说明以上两句程序:
		//File类里的delete方法只能删除空文件夹,所以要先进入到文件夹即删除文件才能删除文件夹,
		//所以递归语句clear(lf[i]);
		//必须在删除文件夹lf[i].delete();的语句之前
				System.out.println("文件夹" + lf[i] + "删除成功");
			}
		}
	}
}

结果:

第1次递归
文件D:\dir1\a1.txt删除成功
文件D:\dir1\a2.xlsx删除成功
文件D:\dir1\a3.docx删除成功
文件D:\dir1\a4.ppt删除成功
文件D:\dir1\a5.pub删除成功
文件D:\dir1\a6.zip删除成功
文件D:\dir1\a7.txt删除成功
文件D:\dir1\a8.txt删除成功
文件D:\dir1\a9.xls删除成功
第2次递归
文件D:\dir1\文件夹1\a1.txt删除成功
文件D:\dir1\文件夹1\a2.xlsx删除成功
文件D:\dir1\文件夹1\a3.docx删除成功
文件D:\dir1\文件夹1\a4.ppt删除成功
文件D:\dir1\文件夹1\a5.pub删除成功
文件D:\dir1\文件夹1\a6.zip删除成功
文件D:\dir1\文件夹1\a7.txt删除成功
文件D:\dir1\文件夹1\a8.txt删除成功
文件D:\dir1\文件夹1\a9.xls删除成功
第3次递归
文件D:\dir1\文件夹1\文件夹2\a1.txt删除成功
文件D:\dir1\文件夹1\文件夹2\a2.xlsx删除成功
文件D:\dir1\文件夹1\文件夹2\a3.docx删除成功
文件D:\dir1\文件夹1\文件夹2\a4.ppt删除成功
文件D:\dir1\文件夹1\文件夹2\a5.pub删除成功
文件D:\dir1\文件夹1\文件夹2\a6.zip删除成功
文件D:\dir1\文件夹1\文件夹2\a7.txt删除成功
文件D:\dir1\文件夹1\文件夹2\a8.txt删除成功
文件D:\dir1\文件夹1\文件夹2\a9.xls删除成功
文件夹D:\dir1\文件夹1\文件夹2删除成功
文件夹D:\dir1\文件夹1删除成功

文件D:\dir1\文件夹1\a1.txt删除成功
文件D:\dir1\文件夹1\a2.xlsx删除成功
文件D:\dir1\文件夹1\a3.docx删除成功
文件D:\dir1\文件夹1\a4.ppt删除成功
文件D:\dir1\文件夹1\a5.pub删除成功
文件D:\dir1\文件夹1\a6.zip删除成功
文件D:\dir1\文件夹1\a7.txt删除成功
文件D:\dir1\文件夹1\a8.txt删除成功
文件D:\dir1\文件夹1\a9.xls删除成功

第3次递归
文件D:\dir1\文件夹1\文件夹2\a1.txt删除成功
文件D:\dir1\文件夹1\文件夹2\a2.xlsx删除成功
文件D:\dir1\文件夹1\文件夹2\a3.docx删除成功
文件D:\dir1\文件夹1\文件夹2\a4.ppt删除成功
文件D:\dir1\文件夹1\文件夹2\a5.pub删除成功
文件D:\dir1\文件夹1\文件夹2\a6.zip删除成功
文件D:\dir1\文件夹1\文件夹2\a7.txt删除成功
文件D:\dir1\文件夹1\文件夹2\a8.txt删除成功
文件D:\dir1\文件夹1\文件夹2\a9.xls删除成功
文件夹D:\dir1\文件夹1\文件夹2删除成功
文件夹D:\dir1\文件夹1删除成功

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值