1.File类概述

  我们要想实现IO的操作,就必须知道硬盘上文件的表现形式。而java就提供了一个File类来让我们使用。

  File:文件或目录(文件夹)路径名的抽象表示形式。


2.File类的构造方法

File(String pathname) 根据一个路径得到File对象
File(String parent,String child) 根据一个目录和一个子文件/子目录得到一个File对象
File(File parent,String child) 根据父File对象和一个子文件/目录得到一个File对象
package cn;

import java.io.File;

public class FileDemo {
	public static void main(String[] args) {
		//File(String pathname):根据一个路径得到一个File对象
		//把E:/demo/a.txt封装成一个对象
		File file = new File("e:/demo/a.txt");
		
		//File(String parent,String child):根据一个目录和一个子文件/目录得到File对象
		File file2 = new File("e:/demo","a.txt");
		
		//File(File parent,String child):根据一个父File对象和一个子文件/目录得到File对象
		File file3 = new File("e:/demo");
		File file4 = new File(file3,"a.txt");
	}

}


3.File的成员方法

创建功能

package cn;

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

/**
 * File类的创建功能
 * public boolean createNewFile() 创建文件
 * public boolean mkdir() 创建文件夹,如果存在这样的文件夹就不创建 只能创建一层文件夹
 * public boolean mkdirs() 创建文件夹,可以创建多层文件夹
 */
public class FileDemo {
	public static void main(String[] args) throws Exception {
		//在e盘目录下创建一个文件夹demo
		File file = new File("e:/demo");
		System.out.println("创建文件夹:"+file.mkdir());
		
		//在e盘目录demo下创建一个文件a.txt
		File file1 = new File("e:/demo/a.txt");
		System.out.println(file1.createNewFile());
		
		//在e盘目录test/aaa下创建a.txt文件
		File file2 = new File("e:/text/aaa");
		System.out.println(file2.mkdirs());
		
	}

}

删除功能

package cn;

import java.io.File;

/**
 * File类的删除功能
 * public boolean delete() 删除文件或文件夹 
 * 
 * 注意:
 * 	如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。
 *  java的删除不经过回收站
 *  要删除一个文件夹,该文件夹内不能包括文件或文件夹
 *
 */
public class FileDemo2 {
	public static void main(String[] args) {
		File file = new File("e:/demo/a.txt");
		System.out.println(file.delete());
		
		File file2 = new File("E:/text/aaa");
		System.out.println(file2.delete());
	}

}

重命名功能

public boolean renameTo(File dest) 重新命名此抽象路径名的文件
package cn;

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

/**
 * 重命名功能 public boolean renameTo(File dest)
 * 		如果路径名相同,就是改名
 * 		如果路径名不同,就是改名+剪切
 * 
 * 路径以盘符开始:绝对路径
 * 路径不以盘符开始:相对路径
 */
public class FileDemo3 {
	public static void main(String[] args) throws IOException {
		//重命名之前的File对象
		File file = new File("e:/text/a.txt");
		
		//要重命名的File对象
		File newFile = new File("e:/text/hello.txt");
		
		//重命名
		System.out.println(file.renameTo(newFile));
	
		File file2 = new File("a.txt");
		file2.createNewFile();
		//File newFile2 = new File("e:/hello.txt");
		//file2.renameTo(newFile2);
	
	}

}

判断功能

public boolean isDirectory() 判断是否为目录
public boolean isFile() 判断是否为文件
public boolean exists() 判断是否存在
public boolean canRead() 判断是否可读
public boolean canWrite() 判断是否可写
public boolean isHidden() 判断是否隐藏
package cn;

import java.io.File;

public class FileDemo4 {
	public static void main(String[] args) throws Exception {
		File file = new File("hello.txt");
		file.createNewFile();
		
		System.out.println(file.isDirectory());//false
		
		System.out.println(file.isFile());//true
		
		System.out.println(file.exists());//true
		
		System.out.println(file.canRead());//true
		
		System.out.println(file.canWrite());//true
		
		System.out.println(file.isHidden());//false
		
	}

}

基本获取功能

public String getAbsolutePath() 获取绝对路径
public String getPath() 获取相对路径
public String getName() 获取文件名
public long length() 获取长度
public long lastModified() 获取最后一次的修改时间,返回的是毫秒值
package cn;

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

public class FileDemo5 {
	public static void main(String[] args) {
		File file = new File("a.txt");
		
		System.out.println(file.getAbsolutePath());//D:\MyEclipse2016\workspace\JavaSE\a.txt
		
		System.out.println(file.getPath());//a.txt
		
		System.out.println(file.getName());//a.txt
		
		System.out.println(file.length());//0
		
		System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(new Date(file.lastModified())));//2016-10-23
	}

}

高级获取功能

public String[] list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的额文件和目录
public File[] listFiles() 获取指定目录下的所有文件或者文件夹的File数组
package cn;

import java.io.File;

public class FileDemo6 {
	public static void main(String[] args) {
		File file = new File("e:/");
		
		String[] list = file.list();
		for(String str:list){
			System.out.println(str);
		}
		
		System.out.println("------------");
		
		File[] files = file.listFiles();
		for(File f:files){
			System.out.println(f.getName()+":"+f.length());
		}
	}

}


4.练习

解法一:

先获取所有的,然后遍历的时候,依次判断,如果满足条件就输出。

package cn;

import java.io.File;

/**
 * 判断E盘目录下是否有后缀名为.jpg的文件,如果有,则输出此文件名称
 *	分析:
 *		1.封装e盘目录
 *		2.获取该目录下的所有文件或者文件夹的File数组
 *		3.遍历File数组,获取每一个File对象,然后判断
 *		4.是否为文件
 *			是:继续判断是否以.jpg结尾
 *				是:输出此文件名称
 *			 	否:随它去吧
 *			否:随它去吧
 *		
 */
public class FileTest {
	public static void main(String[] args) {
		File file = new File("e:/");
		File[] fs = file.listFiles();
		for(File f:fs){
			if(f.isFile()){
				if(f.getName().endsWith(".jpg")){
					System.out.println(f);
				}
			}
		}
	}

}

解法二:

获取的时候就已经满足条件的了,然后输出即可。

package cn;
/**
 * 文件名称过滤器
 */
import java.io.File;
import java.io.FilenameFilter;

public class FileTest2 {
	public static void main(String[] args) {
		File file = new File("e:/");
		
		File[] fs = file.listFiles(new FilenameFilter() {
			
			@Override
			public boolean accept(File dir, String name) {
				File f = new File(dir,name);
				if(f.isFile()){//判断是否为文件
					if(f.getName().endsWith(".jpg")){//判断后缀名是否为.jpg
						return true;
					}
				}
				return false;
			}
		});
		
		for(File f :fs){
			System.out.println(f.getName());
		}
		
	}

}

简化代码

package cn;
/**
 * 文件名称过滤器
 */
import java.io.File;
import java.io.FilenameFilter;

public class FileTest2 {
	public static void main(String[] args) {
		File file = new File("e:/");
		
		File[] fs = file.listFiles(new FilenameFilter() {
			
			@Override
			public boolean accept(File dir, String name) {
				return new File(dir,name).isFile() && name.endsWith(".jpg");
			}
		});
		
		for(File f :fs){
			System.out.println(f.getName());
		}
		
	}

}