首页 > 代码库 > JAVA学习第五十二课 — IO流(六)File对象

JAVA学习第五十二课 — IO流(六)File对象

File类

用来给文件或者文件夹封装成对象

方便对文件与文件夹的属性信息进行操作

File对象可以作为参数传递给流的构造函数

一、构造函数和分隔符

	public static void FileDemo() {//构造函数演示
		
		//可以将一个已存在或不存在的文件或目录封装成File对象
		File file = new File("d:\\a.txt");
		File file2 = new File("d:","a.txt");
		File file3 = new File("d:\\");
		File file4 = new File(file3,"a.txt");
		File f = new File("d:\\sd\\a.txt");//不同操作系统上的分隔符不同,Windows下是\		File f2 = new File("d:"+File.separator+"sd"+File.separator+"a.txt");//和上一句等同,在所有的
		//File.separator方法实际上就是System.getProperty(....);
		System.out.println(f2);
	}

二、类方法

1.获取

获取文件名称:File.getName()
获取文件路径:File.getpath()/getAbsolutePath()
获取文件大小:File.length()
获取文件修改时间:File.lastModified()

public static void FileMethodDemo() throws IOException {
		File file = new File("A.txt");
		String filename = file.getName();//获取文件名称
		String absfilepath = file.getAbsolutePath();//获取绝对路径
		String path = file.getPath();//获取相对路径
		
		long len = file.length();//文件大小
		long time = file.lastModified();//最后一次修改时间
		
		Date date = new Date(time);
		DateFormat df = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
		String time1 = df.format(date);
		
		String parent = file.getParent();//得到父目录
		
		System.out.println("name : "+filename);
		System.out.println("abspath : "+absfilepath);
		System.out.println("path : "+path);//new File("xxx"),xxx是什么就是什么
		System.out.println("filelen : "+len);
		System.out.println("filetime : "+time1);
		System.out.println("filepatent : "+parent);
	<span style="white-space:pre">	</span>}

2.创建和删除

	public static void FileMethodDemo() throws IOException {
		//文件的创建和删除
		//创建
		File file = new File("file.txt");
		boolean falg = file.createNewFile();
		System.out.println("flag : "+falg);//和输出流不同,如果不存在,就创建,否则,不创建
		
		//删除
		boolean flag1 = file.delete();
		//boolean falg = file.deleteOnExit();退出时,删除
		System.out.println("remove flag: "+flag1);
		
		//文件夹的创建和删除
		//创建单级目录
		File dir = new File("ACM");
		boolean b = dir.mkdir();//创建单级目录
		System.out.println("b:"+b);
		//删除
		dir.delete();//Window下要注意,文件夹里有内容删不掉
		
		//多级目录
		File dir = new File("ACM\\asd\\as\\ad");
		dir.mkdirs();//创建多级目录
		System.out.println(dir.delete());//删除的只是ad,其他是父目录
	}
}


PS:如果文件正在被流操作,也删不掉
3.判断

public static void FileMethodDemo() throws IOException {
		//判断
		File file = new File("A.txt");
		boolean flag = file.exists();//判断A.txt是否存在
		
		boolean flag1 = file.isFile();//判断是否是文件
		boolean flag2 = file.isDirectory();//判断是否是目录
		System.out.println(flag+":"+flag1+":"+flag2);
	}

4.重命名和剪切

	public static void FileMethodDemo() throws IOException {
		
//		//重命名
//		File file = new File("D:\\盛夏光年.mp3");
//		File file2 = new File("D:\\盛夏光年_1.mp3");
//		file.renameTo(file2);//同目录下,重命名
		
		//剪切
		File file = new File("D:\\盛夏光年_1.mp3");
		File file2 = new File("G:\\盛夏光年.mp3");
		file.renameTo(file2);//不同目录下,剪切
	}

5.获取目录内容

public static void FileMethodDemo() throws IOException {
		
		File file = new File("c:\\");
		//File("c:\\a.txt");如果不是一个目录,而是一个文件,会空指针异常,数组根本不会创建成功
		//如果访问的是系统级目录也会发生空指针异常
		//File("c:\\eqwwrfg")如果目录存在,没有内容,会返回一个数组,但是长度为0
		
		//获取当前目录下的文件和文件夹的名称和隐藏文件
		String[] str = file.list();
		for(String p : str){
			System.out.println(p);
		}
	}

过滤器:

如果只要C盘下的.java文件的话,那就要用到过滤器

list(FilenameFilter filter)
返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。

FilenameFilter,实现此接口的类实例可用于过滤器文件名。

此接口下只有一个方法:

accept(File dir,String name)
测试指定文件是否应该包含在某一文件列表中。:当且仅当该名称应该包含在文件列表中时返回 true;否则返回 false

import java.io.*;

class FilerJava implements FilenameFilter{
	public boolean accept(File dir, String name) {
		// System.out.println(dir+"----"+name);
		return name.endsWith(".java");//文件后缀
	}
	
}
public class Main 
{
	public static void main(String[] args) throws IOException {
		
		FileMethodDemo();
	}

	public static void FileMethodDemo() throws IOException {
		
		File file = new File("c:\\");
		
		String[] str = file.list(new FilerJava());
		for(String p : str){
			System.out.println(p);
		}
	}
}

实际上,过滤器还是先遍历了一边目录下所有文件,符合条件的,返回true


listFiles(FileFilter filter)
返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。

import java.io.*;

class FilerHidden implements FileFilter{

	@Override
	public boolean accept(File pathname) {
		// TODO Auto-generated method stub
		return !pathname.isHidden();//显示非隐藏对象
	}
}
public class Main 
{
	public static void main(String[] args) throws IOException {
		
		FileMethodDemo();
	}

	public static void FileMethodDemo() throws IOException {
		
		File dir = new File("C:\\");
		
		File[] files = dir.listFiles(new FilerHidden());//得到当前目录下所有非隐藏对象
		
		for(File f : files){
			System.out.println(f);
		}
		
	}
}

过滤器的简单应用

import java.io.*;

class FilerHidden implements FilenameFilter{

	private String houzhui;
	
	public FilerHidden(String houzhui) {
		super();
		this.houzhui = houzhui;
	}

	public boolean accept(File dir, String name) {
		
		return name.endsWith(houzhui);
	}


}
public class Main 
{
	public static void main(String[] args) throws IOException {
		
		FileMethodDemo();
	}

	public static void FileMethodDemo() throws IOException {
		
		File dir = new File("C:\\");
		
		File[] files = dir.listFiles(new FilerHidden(".java"));
		
		for(File f : files){
			System.out.println(f);
		}	
	}
}

JAVA学习第五十二课 — IO流(六)File对象