File类

本章目标

掌握File类的作用

可以使用File类中的方法对文件进行操作

 

File类

在整个io包中,唯一表示与文件本身有关的类就是File类。使用File类可以进行创建或删除文件等常用操作。要想使用File类,则首先要观察File类的构造方法,此类的常用构造方法如下所示:

——public File(String pathname)  à 实例化File类的时候,必须设置好路径。

 

File类中的主要方法和常量

File类
 

实例操作

实例操作一:创建一个新文件

实例操作二:删除一个指定的文件

实例操作三:综合创建、删除文件的操作

实例操作四:创建一个文件夹

实例操作五:列出指定目录的全部文件

实例操作六:判断一个给定的路径是否是目录

 

实例操作一:创建一个新文件

import java.io.File;
import java.io.IOException;
public class FileDemo01 {
	public static void main(String[] args) {
		File f = new File("d:\\text.txt");//必须给出完整路径
		try {
			f.createNewFile();//根据给定的路径创建新文件
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
/* 结果:
 * 创建新文件 text.txt
 * */
}

 

程序的问题

在不同的操作系统中,路径的分隔符表示是不一样的,例如:

——windows中使用反斜杆表示目录的分隔符:“\” ;

——linux中使用正斜杆表示目录的分隔符:“/”。

那么,既然Java程序本身具有可移植性的特点,则在编写路径的时候最好可以根据程序所在的操作系统可以进行自动使用符合本地操作系统要求分隔符,这样才能达到可移植性的目的,要想实现这样的功能,则就需要观察File类中提供的两个常量。

import java.io.File;
public class FileDemo02 {
	public static void main(String[] args) {
		System.out.println("pathSeparator:"+File.pathSeparator);//调用静态常量
		System.out.println("separator:"+File.separator);//调用静态常量
	}
/* 结果:
 * pathSeparator:;
 * separator:\
 * */
}

 

修改创建文件的代码

import java.io.File;
import java.io.IOException;
public class FileDemo03 {
	public static void main(String[] args) {
		String path = "d:"+File.separator+"text.txt";//拼凑出可以适应操作系统的路径
		File f = new File(path);//必须给出路径
		try {
			f.createNewFile();//根据给定的路径创建新文件
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
/* 结果:
 * 创建新文件 text.txt
 * */
}

 

实例操作二:删除一个指定的文件

import java.io.File;
public class FileDemo04 {
	public static void main(String[] args) {
		File f = new File("d:"+File.separator+"text.txt");//必须给出路径
		f.delete();//删除文件
	}
/* 结果:
 * 删除文件 text.txt
 * */
}

 

在删除文件中增加判断

import java.io.File;
public class FileDemo05 {
	public static void main(String[] args) {
		File f = new File("d:"+File.separator+"text.txt");//必须给出路径
		if(f.exists()){//判断文件是否存在
			f.delete();//如果存在,则删除文件
			System.out.println("该文件已删除!");//打印提示
		}else{
			System.out.println("该文件已不存在!");//打印提示
		}
		
	}
/* 结果:
 * 该文件已删除!
 * */
}

 

实例操作三:综合创建、删除文件的操作

给定一个文件的路径,如果此文件存在,则将其删除,如果文件不存在则创建一个新的文件 。 

File类
 

 

实现代码

import java.io.File;
import java.io.IOException;
public class FileDemo06 {
	public static void main(String[] args) {
		File f = new File("d:"+File.separator+"text.txt");//必须给出路径
		if(f.exists()){//判断文件是否存在
			f.delete();//删除文件
		}else{
			try {
				f.createNewFile();//创建文件
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}
/* 结果:
 * */
}

 

操作延迟

以上程序已经完成了所要求的功能,但是细心的读者可能会发现以上程序的问题,在每次程序执行完毕之后,文件并不会立刻的创建或删除,会有一些延迟,这是因为所有的操作都需要通过JVM完成所造成的问题。

File类
 

实例操作四:创建一个文件夹

import java.io.File;
public class FileDemo07 {
	public static void main(String[] args) {
		File f = new File("d:"+File.separator+"chaoyi");//给出路径
		f.mkdir();//创建文件夹
	}
/* 结果:
 * 创建文件夹
 * */
}

 

实例操作五:列出指定目录的全部文件

如果现在给出了一个目录,则可以直接列出目录中的内容。在File类中定义了两个列出文件夹内容的方法:

——public String[] list():列出全部名称,返回一个字符串数组;

——public File[] listFiles():列出完整的路径,返回一个File对象数组。 

 

使用list()方法

import java.io.File;
public class FileDemo08 {
	public static void main(String[] args) {
		File f = new File("d:"+File.separator);//必须给出路径
		String str[] = f.list();//列出给定的目录中的内容
		for(int i=0; i<str.length; i++){
			System.out.println(str[i]);
		}
	}
/* 结果:
 * program files
 * program files (x86)
 * qiSDK
 * qiyi
 * qqData
 * QQMusicCache
 * QQVipDownload
 * */
}

 

使用listFiles()方法

import java.io.File;
public class FileDemo09 {
	public static void main(String[] args) {
		File f = new File("d:"+File.separator);//必须给出路径
		File files[] = f.listFiles();//列出全部的文件
		for(int i=0; i<files.length; i++){
			System.out.println(files[i]);
		}
	}
/* 结果:
 * d:\program files
 * d:\program files (x86)
 * d:\qiSDK
 * d:\qiyi
 * d:\qqData
 * d:\QQMusicCache
 * d:\QQVipDownload
 * */
}

 

实例操作六:判断一个给定的路径是否是目录 

import java.io.File;
public class FileDemo10 {
	public static void main(String[] args) {
		File f = new File("d:"+File.separator);//路径
		if(f.isDirectory()){//判断是否是目录
			System.out.println(f.getPath()+"路径是目录。");
		}else{
			System.out.println(f.getPath()+"路径不是目录。");
		}
	}
/* 结果:
 * d:\路径是目录。
 * */
}

 

范例讲解:列出指定目录的全部内容

要求:

——给定一个目录,要求列出此目录下的全部内容,因为给定目录可能存在子文件夹,此时要求也可以把所有的子文件夹的子文件通通列出来。

分析:

——要先判断给定的路径是否是目录,之后再使用listFiles()列出一个目录中的全部内容,一个文件夹中可能包含其他的文件或子文件夹,子文件夹中也可能会包含其他的子问夹,所以此处只能采用递归的调用方式完成。

 

分析

File类
 

实现代码

import java.io.File ;
public class FileDemo11{
	public static void main(String args[]){
		File my = new File("d:" + File.separator) ;	// 操作路径
		print(my) ;
	}
	public static void print(File file){	// 递归调用
		if(file!=null){	// 判断对象是否为空
			if(file.isDirectory()){	// 如果是目录
				File f[] = file.listFiles() ;	// 列出全部的文件
				if(f!=null){	// 判断此目录能否列出
					for(int i=0;i<f.length;i++){
						print(f[i]) ;	// 因为给的路径有可能是目录,所以,继续判断
					}
				}
			}else{
				System.out.println(file) ;	// 输出路径
			}
		}
	}
/*结果:
 * 列出指定目录中的全部内容
 * d:\app\Administrator\diag\rdbms\oracle11\oracle11\alert\log_11.xml
 * d:\app\Administrator\product\11.2.0\dbhome_1\install\jlib\instcrs.jar
 * d:\app\Administrator\product\11.2.0\dbhome_1\install\jlib\instdb.jar
 * */
}