37JavaI/O流(持续更新)-----File类全解

通过I/O流可以对文件的内容进行读写和操作,但对文件本身进行的一些常规操作是无法通过I/O流来实现的,例如创建一个文件、删除或者重命名某个文件、判断硬盘上某个文件是否存在等。针对文件的这类操作,JDK中提供了一个File类,该类封装了一个路径,并提供了一系列的方法用于操作该路径所指向的文件。

一、File类的常用方法

File类用于封装一个路径,这个路径可以是从系统盘符开始的绝对路径,如D:\file.txt,也可以是相对于当前目录而言的相相对路径,如sre\Hello. java. File类内部封装的路行可以指可以指向一个文件,也可以指向一个目录,在File 类中提供了针对这些文件或目录的一些常规操作。

File类的常用构造方法

方法声明 功能描述
Fiel(String pathname) 通过指定的-个字符 串类型的文件路径来创建一个新的File 对象
File(String parent,String child) 根据指定的一个字符串类型的父路径和一个字符串类型的子路径(包括文件名称)创建一个File对象
File(File parent,String child) 根据指定的File类的父路径和字符串类型的子路径(包括文件名称)创建一个File对象

通常来讲,如果程序只处理一个目录或文件,并且知道该目录或文件的路径,使用第一个构造方法较方便。如果程序处理的是一个公共目录中的若干子目录或文件,那么使用第二个或者第三个构造方法会更方便。
File类中提供了一系列方法,用于操作其内部封装的路径指向的文件或者目录,例如判断文件/目录是否存在、创建和删除文件/目录等。

 File类的常用方法

方法声明 功能描述
boolean exists( ) 判断File对象对应的文件或目录是否存在,若存在则返回ture, 否则派回false
boolean delete( ) 删除File对象对应的文件或目录,若成功删除则返回true,否则返回false
boolean createNewFile() 当File对象对应的文件不存在时,该方法将新建一个此File对象所指定的新文件,若创建成功则返回true,否则返回false
String getName() 返回File对象表示的文件或文件夹的名称
String getPath() 返回File对象对应的路径
String getAbsolutePath() 返回File对象对应的绝对路径(在Unix/Linux等系统上,如果路径是以正斜线/开始,则这个路径是绝对路径;在Windows等系统上,如果路径是从盘符开始,则这个路径是绝对路径)
String getParent() 返回File对象对应目录的父目录(即返回的目录不包含最后一级子目录)
boolean canRead() 判断File对象对应的文件或目录是否可读,若可读则返回true,反之返回false
boolean canWrite() 判断File对象对应的文件或目录是否可写,若可写则返回true,反之返回false
boolean isFile() 判断File对象对应的是否是文件(不是目录),若是文件则返回true,反之返回false
boolean isDirectory() 判断File对象对应的是否是目录(不是文件),若是目录则返回true,反之返回false
boolean isAbsolute() 判断File对象对应的文件或目录是否是绝对路径
long lastModified() 返回1970年1月1日0时0分0秒到文件最后修改时间的毫秒值
long length() 返回文件内容的长度
String[] list() 列出指定目录的全部内容,只是列出名称
String[] list( FilenameFilterfilter) 接收一个FilenameFilter参数,通过该参数可以只列出符合条件的文件
File[] listFiles() 返回一个包含了File 对象所有子文件和子目录的File 数组

二、File类中方法演示

获取文件属性

package day06;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * java.io.File
 * File的每一个实例可以表示文件系统中的一个文件
 * 或目录
 * 使用File可以:
 * 1.访问文件或目录的属性(如:大小、名字,修改时间等 )
 * 2.操作文件或目录(创建,删除文件和目录)
 * 3.访问目录中的所有内容
 * 但是不可以访问文件数据
 * @author 
 *
 */
public class FileDemo1 {

	public static void main(String[] args) {
		File file = new File("."+File.separator+"Demo.txt");
		//获取名字
		String name = file.getName();
		System.out.println("name:"+name);
		//大小(占用的字节量)
		long length = file.length();
		System.out.println("大小:"+length+"字节");
		//是否为文件
		boolean isFile = file.isFile();
		System.out.println("是文件:"+isFile);
		//是否为目录
		boolean isDir = file.isDirectory();
		System.out.println("是目录:"+isDir);
		//是否为隐藏文件
		boolean isHadden = file.isHidden();
		System.out.println("是否是隐藏文件:"+isHadden);
		//最后修改时间
		long time = file.lastModified();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年M月d日 HH:mm:ss");
		Date date = new Date(time);
		System.out.println(sdf.format(date));
		//判断可写
		boolean canWrite = file.canWrite();
		System.out.println("可写:"+canWrite);
				

	}

}

创建一个文件

package day06;

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

/**
 * 创建一个文件
 * @author 
 *
 */
public class FileDemo2 {

	public static void main(String[] args) throws IOException {
		/**
		 * 在当前目录下创建文件test.txt
		 * 默认路径就是当前目录,即"./"
		 * 所以可以不写
		 */
		File file = new File("test.txt");
		/**
		 * boolean exits()
		 * 判断文件是否真实存在
		 */
		if (!file.exists()) {
			file.createNewFile();
			System.out.println("创建完毕");
		} else {
			System.out.println("文件已经存在");
		}
		
		

	}

}

删除一个文件

package day06;

import java.io.File;

/**
 * 删除一个文件
 * @author 
 *
 */
public class FileDemo3 {

	public static void main(String[] args) {
		/**
		 * 删除当前目录中的test.txt文件
		 */
		File file = new File("test.txt");
		if (file.exists()) {
			file.delete();
			System.out.println("文件已删除");
		} else {
			System.out.println("文件不存在");
		}
	}

}

创建一个目录

package day06;

import java.io.File;

/**
 * 创建一个目录
 * @author 
 *
 */
public class FileDemo4 {

	public static void main(String[] args) {
		/**
		 * 在当前目录下创建一个名为demo的
		 * 目录
		 */
		File file = new File("demo");
		if (!file.exists()) {
			file.mkdir();
			System.out.println("创建目录完毕");
		} else {
			System.out.println("该目录已存在");
		}

	}

}

创建一个多级目录

package day06;

import java.io.File;

/**
 * 创建一个多级目录
 * @author 
 *
 */
public class FileDemo5 {

	public static void main(String[] args) {
		/**
		 * 在当前目录下创建
		 * ./a/b/c/d/e/f目录
		 */
		File dir = new File("a"+File.separator+"b"+File.separator+"c"+File.separator+"d"+File.separator+"e"+File.separator+"f");
		if (!dir.exists()) {
			/**
			 * 在创建当前目录的同时将所有
			 * 不存在的父目录一起创建出来
			 */
			dir.mkdirs();
			System.out.println("目录创建完毕");
		} else {
			System.out.println("目录已存在");
		}
	}

}

删除一个目录

package day06;

import java.io.File;

/**
 * 删除一个目录
 * delete方法可以删除一个目录,但是前提
 * 是该目录必须是一个空目录
 * @author 
 *
 */
public class FileDemo6 {

	public static void main(String[] args) {
		File file = new File("demo");
		if (file.exists()) {
			file.delete();
			System.out.println("目录已删除");
		} else {
			System.out.println("目录不存在");
		}
	}

}

获取一个目录中的所有子项

package day06;

import java.io.File;

/**
 * 获取一个目录中的所有子项
 * @author 
 *
 */
public class FileDemo7 {

	public static void main(String[] args) {
		/**
		 * 获取当前目录中的所有子项
		 */
		File dir = new File(".");
		/**
		 * boolean isFile()
		 * 判断是否为一个文件
		 * 
		 * boolean isDirectory()
		 * 判断是否为一个目录
		 */
		if (dir.isDirectory()) {
			/**
			 * File[] listFiles()
			 * 获取所有子项
			 */
			File[] subs = dir.listFiles();
			for (File sub : subs) {
				if (sub.isFile()) {
					System.out.print("文件:");
				} else {
					System.out.print("目录:");
				}
				System.out.println(sub.getName());
			}
		} 
	}

}

获取一个目录中符合条件的部分子项

package day06;

import java.io.File;
import java.io.FileFilter;

/**
 * 获取一个目录中符合条件的部分子项
 * 使用重载的ListFiles方法,需要传入一个
 * 额外的文件过滤器
 * 文件过滤器是一个接口:FileFilter
 * @author 
 *
 */
public class FileDemo8 {

	public static void main(String[] args) {
		File dir = new File(".");
		/**
		 * 获取名字以.开头的子项
		 */
		File[] subs = dir.listFiles(new FileFilter() {
			public boolean accept(File file) {
				System.out.println("正在过滤:"+file.getName());
				return file.getName().startsWith(".");
			}
		});
		for (File sub : subs) {
			System.out.println(sub.getName());
		}
	}

}

猜你喜欢

转载自blog.csdn.net/qq_44787898/article/details/103308840