JavaIO之File类

在java.io包下,File类是唯一与文件本身操作:如删除文件、创建文件、取得文件信息有关的程序类。

1. File类的实例化对象

实例化File类对象主要用到两个构造方法:

(1)根据绝对路径实例化File类对象:

    public File(String pathname)

(2)根据父路径和子路径实例化File类对象:

    public File(String parent, String child)

在对任何文件进行删除、创建、取得文件信息操作前,均需要先实例化File类对象,该对象表示要操作的文件。

2. 创建新文件

    public boolean createNewFile() throws IOException 

通过实例化File类对象调用createNewFile()方法从而创建指定路径的文件,代码演示如下:

package www.bit.java.test;

import java.io.File;

public class Test {
	public static void main(String[] args) {
		//定义要操作的文件路径
		File file=new File("C:\\Users\\Administrator\\Desktop\\Test.txt");
		try {
			//创建新文件
			file.createNewFile();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

运行结果为:在指定路径(如:C:\Users\Administrator\Desktop)下创建新文件Test.txt

故,创建文件的步骤为:先需要定义要操作(创建)的文件的File类对象,再通过该File类对象去操作(创建)该文件。

3. 判断文件是否存在

    public boolean exists()

该方法用于判断File类对象对应的文件是否存在?演示如下:

package www.bit.java.test;

import java.io.File;

public class Test {
	public static void main(String[] args) {
		// 定义要操作的文件路径
		File file = new File("C:\\Users\\Administrator\\Desktop\\Test.txt");
		// 判断文件Test.txt是否存在
		System.out.println(file.exists());
	}
}

运行结果为:true

4. 删除文件

    public boolean delete() 
该方法用于删除File类对象对应的文件,演示如下:
package www.bit.java.test;

import java.io.File;

public class Test {
	public static void main(String[] args) {
		// 定义要操作的文件路径
		File file = new File("C:\\Users\\Administrator\\Desktop\\Test.txt");
		// 删除文件Test.txt
		//在删除文件前需要判断该文件是否存在
		if(file.exists())
		{
			file.delete();
		}
	}
}

需要注意的是,在删除前最好判断该文件是否存在,这样使得程序更加符合逻辑,但不判定也不会出现任何异常!

以上实现了文件的简单处理操作,但是代码存在一个问题:

       关于路径的格式问题。在Windows下的路径为:C:\Users\Administrator\Desktop\Test.txt,而在Linux下的路径为:C:/Users/Administrator/Desktop/Test.txt。这就有可能出现实际项目部署环境与开发环境不同的问题,所以在使用路径分隔符上一般采用File类的一个常量: public static final String separator 来描述。故使用该常量表示路径的分隔符,代码演示如下:

package www.bit.java.test;

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

public class Test {
	public static void main(String[] args) {
		// 定义要操作的文件路径,使用File类的常量separator
		File file = new File("C:"+File.separator+"Users"+File.separator
				+"Administrator"+File.separator+"Desktop"+File.separator+"Test.txt");
		try {
			file.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

5. 关于目录的操作

(1)取得父路径

    public String getParent()

(2)取得父路径的File类对象

    public File getParentFile()

(3)创建目录(无论有多少级目录都会创建,都会创建)

    public boolean mkdirs()

对以上三个方法进行代码演示:

package www.bit.java.test;

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

public class Test {
	public static void main(String[] args) throws IOException {
		// 定义要操作的文件路径,使用File类的常量separator
		File file = new File("C:"+File.separator+"Users"+File.separator+"Administrator"
						+File.separator+"Desktop"+File.separator+"Test"+File.separator+"MyFile.txt");
		//获取父路径
		System.out.println(file.getParent());
		//获取父路径的File类对象
		File parentFile=file.getParentFile();
		file.mkdirs();
	}
}

运行结果为:C:\Users\Administrator\Desktop\Test,因为C:\Users\Administrator\Desktop\Test\MyFile.txt的父路径就是它,并且取得了其父路径的File类对象。在运行结束后,在桌面上创建了Test文件夹以及在其文件夹内也创建了MyFile.txt文件夹。故需要注意,当不想要MyFile.txt也创建为文件夹,就需要在其父路径的File类对象上调用mkdirs()方法,之后再调用createNewFile()方法去创建文件。故,将上述代码修改如下:

package www.bit.java.test;

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

public class Test {
	public static void main(String[] args) throws IOException {
		// 定义要操作的文件路径,使用File类的常量separator
		File file = new File("C:"+File.separator+"Users"+File.separator+"Administrator"
						+File.separator+"Desktop"+File.separator+"Test"+File.separator+"MyFile.txt");
		//获取父路径
		System.out.println(file.getParent());
		//获取父路径的File类对象
		File parentFile=file.getParentFile();
		//先创建其父路径为目录
		parentFile.mkdirs();
		//再创建具体文件
		file.createNewFile();
	}
}

6. 取得文件信息

(1)判断路径是否为文件

    public boolean isFile()

(2)判断路径是否为目录

    public boolean isDirectory()

(3)取得文件大小(单位为字节)

    public long length()

(4)最后一次修改文件日期

    public long lastModified()

调用以上方法进行代码演示:

package www.bit.java.test;

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

public class Test {
	public static void main(String[] args) throws IOException {
		// 定义要操作的文件路径,使用File类的常量separator
		File file = new File("C:"+File.separator+"Users"+File.separator+"Administrator"
						+File.separator+"Desktop"+File.separator+"Test"+File.separator+"MyFile.txt");
		//调用isDirectory()方法
		System.out.println("判断是否为目录:"+file.isDirectory());
		//调用exists()方法以及isFile()方法
		if(file.exists()&&file.isFile())
		{
			//调用length()方法
			System.out.println("文件大小:"+file.length());
			//调用lastModified()方法
			System.out.println("最后修改日期:"+file.lastModified());
		}
	}
}

运行结果如下:

判断是否为目录:false
文件大小:43
最后修改日期:1526998596614

此时你会发现,日期打印的是一串数字,根本无法判断具体是什么日期,这是需要用到Date类以及关于日期格式的SimpleDateFormat类,添加代码如下:

SimpleDateFormat format=new SimpleDateFormat("yy年MM月dd日 HH:mm:ss");
Date date=new Date(file.lastModified());
String msg=format.format(date);
System.out.println("日期:"+msg);

运行结果如下:

日期:18年05月22日 22:16:36

7. 列出目录中的全部组成

    public File[] listFiles()

代码演示如下所示:

package www.bit.java.test;

import java.io.File;

public class Test {
	public static void main(String[] args){
		// 定义要操作的文件路径,使用File类的常量separator
		File file = new File("C:"+File.separator+"Users"+File.separator+"Administrator"+File.separator+"Desktop");
		//在列出当前目录的所有组成前,先判断当前目录是否存在
		if(file.exists()&&file.isDirectory())
		{
			//列出目录中的全部内容
			File[] result=file.listFiles();
			for (File file2 : result) {
				System.out.println(file2);
			}
		}
	}
}

运行结果为Destop目录下的全部组成,如下所示:

C:\Users\Administrator\Desktop\desktop.ini
C:\Users\Administrator\Desktop\eclipse.lnk
C:\Users\Administrator\Desktop\Internet Explorer.lnk
C:\Users\Administrator\Desktop\lingo11
C:\Users\Administrator\Desktop\matlab.lnk
C:\Users\Administrator\Desktop\SQL Server Management Studio.lnk
C:\Users\Administrator\Desktop\stats.lnk
C:\Users\Administrator\Desktop\sublime_text.lnk
C:\Users\Administrator\Desktop\Test












發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章