今天我们学习一下java中的File类

相应的API文档:File类

以下是本人做的一些整理:

下面的构造函数可以用来生成File 对象:

File(File parent, String 

          根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。

File(String 

          通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。

File(String parent, String 

          根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。

File(URI 

          通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File

一:File类的方法详解

File file1 = new File ("C://temp//myNote.txt"); // in Windows  这是windows文件系统下的方法
    File file2 = new File ("/tmp/myNote.txt"); // in Linux/Unix        unix文件系统的方法

   在不同的操作系统中,文件之间的分隔符表示方式不一样的,为了安全起见,我们可以使用File.separator来表示分隔符
最安全的建立文件的方法:

File myFile = new File("C:" + File.separator + "jdk1.5.0" + File.separator, "File.java");

    提醒:File.separator 表示的是文件路径符号。

常用方法介绍:

二:File类的实例应用

System.out.println(myFile.getName());//取得文件名称的方法
    System.out.println(myFile.getPath());//取得文件路径的方法
    System.out.println(myFile.isAbsolute());//判断文件是否完整
    System.out.println(myFile.getParent());//取得文件的根目录
     System.out.println(myFile.exists());//判断文件是否存在
     System.out.println(myFile.isDirectory());//判断是否是目录
     System.out.println(myFile.isFile());//判断是否是文件
     System.out.println(myFile.isHidden());//判断是否是隐藏文件
     System.out.println(myFile.canRead());//判断是否可读
     System.out.println(myFile.canWrite());//判断是否可写
     File myFile_C=new File("d:/test.txt");
     System.out.println(new Date(myFile_C.lastModified()));//最后一次编辑时间
     myFile_C.renameTo(new File("c:/text.txt.bak"));//重新命名此抽象路径名表示的文件。
     myFile_C.setReadOnly();//设置为只读

1. 创建文件和目录

编写代码创建一个目录E:\test,下面含有两个文件1.txt,2.txt 和一个目录dir,dir目录下有两个文件3.txt和4.txt 

<span style="font-family:SimSun;font-size:18px;"> public static  void createDirectory(){
    	System.out.println("**********************");
    	File f=new File("E:"+File.separator+"test");   //File.separator为文件分隔符,在windows下为\
    	System.out.println("create directory...");
    	f.mkdir();     //创建目录
    	File file1=new File(f,"1.txt");    //在目录test下创建两个文件
    	File file2=new File(f,"2.txt");
    	try {
			file1.createNewFile();
			file2.createNewFile();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}   //创建文件
    	 	
    	File f2=new File(f,"dir");    //在目录test下创建目录dir
    	f2.mkdir();  	
    	File file3=new File(f2,"3.txt");   //创建文件
    	File file4=new  File(f2,"4.txt");
    	try {
			file3.createNewFile();
			file4.createNewFile();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	//测试创建的File对象:是文件还是文件夹
    	System.out.println("f is file? " +f.isFile());    //false
    	System.out.println("f is directory? "+ f.isDirectory());    //true
    	System.out.println("file1 is file? " +file1.isFile());   //true
    	System.out.println("file2 is file? " +file1.isFile());   //true
    	System.out.println("f2 is file? " +f.isFile());    //false
    	System.out.println("f2 is directory? "+ f.isDirectory());    //true
    	System.out.println("file3 is file? " +file1.isFile());   //true
    	System.out.println("file3 is file? " +file1.isFile());   //true 	
    }</span>

2. 列出目录下所有的文件名

    编写一个程序,在命令行中以树状结构展示特定的文件夹及其子文件(夹)。(使用递归来实现)

public class FileTree {
	public static void main(String[] args) {
		//找一个自己硬盘上有用的文件夹
		File f = new File("e:/test");
		printFile(f, 0);
	}
	//树状结构打印
	static void printFile(File file,int level){
		for (int i = 0; i < level; i++) {
			System.out.print("-");
		}
		System.out.println(file.getName()); 
		
		if(file.isDirectory()){
			File[]  files = file.listFiles();
			for (File temp : files) {
				printFile(temp, level+1);
			}
		}
	}
}

显示结果:

test
 -1.txt
 -2.txt
 -dir
 --3.txt
 --4.txt

3. 列出目录下所有的文件路径

   编写一个程序,在命令行中以树状结构展示特定的文件夹及其子文件(夹)的路径。(使用递归来实现)

public class FileTree {
	public static void main(String[] args) {
		//找一个自己硬盘上有用的文件夹
		File f = new File("e:/test");
		printFilePath(f, 0);
	}

	static void printFilePath(File file,int level){
		for (int i = 0; i < level; i++) {
			System.out.print("-");
		}
		System.out.println(file.getPath()); 
		
		if(file.isDirectory()){
			File[]  files = file.listFiles();
			for (File temp : files) {
				printFilePath(temp, level+1);
			}
		}
	}
}

显示结果:

e:\test
 -e:\test\1.txt
 -e:\test\2.txt
 -e:\test\dir
 --e:\test\dir\3.txt
 --e:\test\dir\4.txt

4. 删除一个文件(包含文件里的目录)

<span style="font-family:SimSun;font-size:18px;">public class FileDeleteAllFile {
	public static void main(String[] args) {
		//找一个自己硬盘上有用的文件夹
		File f = new File("e:/test");
		deleteAll(f);
		
	}
	
	public static void deleteAll(File file){
		if(!file.exists()) 
			return ;
		
		//为文件或者目录为空
		if(file.isFile()||file.list().length==0){
			file.delete();
			return;
		}else{
			File[] files=file.listFiles();
			for(File f:files){
				deleteAll(f);
			}
			file.delete();
		}
		
	}
}</span>