JAVA——IO流 篇八(File类的操作)

在API的java.io包中有一个类File,此类主要定义了一些关于java虚拟机访问文件、文件属性、操作文件的方法等。

  • 其构造函数有:
    File(File parent, String child)          从父抽象路径名和子路径名字符串创建新的 File实例。  
    File(String pathname)                    通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。  
    File(String parent, String child)        从父路径名字符串和子路径名字符串创建新的 File实例。  
    File(URI uri)                            通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。 
    
//可以将已经存在的,或者不存在的文件或者目录封装成file对象 例如将 路径 D:\\a.txt封装成为路径
File file = new File("D:\\a.txt");//  File(String pathname) 
File file1 = new File("D:\\","a.txt");//File(String parent, String child)

File file2 = new File("D:\\");
File file21 = new File(file2,"a.txt");// File(File parent, String child)
  • 其字段主要有
     static String pathSeparator 	与系统相关的路径分隔符字符,为方便起见,表示为字符串。  
     static char pathSeparatorChar 	与系统相关的路径分隔符。  
     static String separator 	    与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串。  
     static char separatorChar      与系统相关的默认名称分隔符。  
    

可以看出,其字段都是与分隔符有关的,以前我们使用系统路径分隔符通过System.getProperty(“file.separator”),而在File类里面特意对其进行了封装

         String fileSeparator = System.getProperty("file.separator");
		File file = new File("D:"+fileSeparator+"a.txt");
		//改写为
		File file2 = new File("D:"+File.separator+"a.txt");
  • 其常见方法有
     	获取文件名称 getName();
     	获取文件路径 getPath();  getAbsolutePath();
     	获取文件大小 length();
     	获取文件修改时间 lastModified();
    
     	创建文件  createNewFile();
     	删除文件  delete();
     	创建目录  mkdir();
     	删除目录  delete();
     	
     	文件是否存在 exists();
     	是否是文件  isFile();
     	是否是目录  isDirectory();
     
     	重命名 renameTo(File dest)
    
     	列出可用的文件系统根(盘符)  listRoots();
     	剩余空间  getFreeSpace()
     	总空间  getTotalSpace()
     	可用空间  getUsableSpace()
    
		File  file = new File("txt.txt");
		String name = file.getName();
		System.out.println("文件名:" + name);
		String path = file.getPath();
		System.out.println("文件路径:" + path);
		String absolutePath = file.getAbsolutePath();
		System.out.println("文件绝对路径:" + absolutePath);
		long length = file.length();
		System.out.println("文件大小"+length);
		long time = file.lastModified();
		//System.out.println("最后修改时间"+time);
		Date date = new Date(time);
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
		String dateString = dateFormat.format(date);
		System.out.println("最后修改时间"+dateString);
	
	  //创建文件 如果文件不存在,则创建,文件存在,则不创建
		File file = new File("file.txt");
		boolean b = file.createNewFile();
		System.out.println("b:" + b);
		
		boolean d = file.delete();
		System.out.println(d);

		File dirFile = new File("abc");
		boolean bDir = dirFile.mkdir();//创建目录
		
		dirFile.delete();//删除目录
		System.out.println(bDir);
		
		dirFile = new File("abc\\ab\\a");
		dirFile.mkdirs();//创建多级目录
		//删除多级目录需要迭代删除,删除一次只能删除最里面的一级目录

		File file = new File("txt.txt");
		file.mkdir();//创建一个文件夹 名字为txt.txt
		boolean b = file.exists();//文件是否存在
		System.out.println(b);
		//最好先判断文件是否存在
		System.out.println(file.isFile());//是否是文件
		System.out.println(file.isDirectory());//是否是目录

		File file1 = new File("txt.txt");//已经存在的文件
		File file2 = new File("txt1.txt");
		file1.renameTo(file2);//将txt.txt重命名为txt1.txt
		
		File file3 = new File("D:\\1.txt");
		file2.renameTo(file3);//将txt1.txt剪切到D盘并重命名为1.txt

		File[] fileList = File.listRoots();//列出可用的文件系统根(盘符)
		for (int i = 0; i < fileList.length; i++)
		{
			System.out.println(fileList[i]);
		}
		
		File file = new File("D:\\");
		System.out.println(file.getFreeSpace());//剩余空
		System.out.println(file.getTotalSpace());//总空间
		System.out.println(file.getUsableSpace());//可用空间

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

	     /*
		 * 获取当前目录下的文件以及文件夹的名称,包含隐藏文件
		 * 调用list方法的File对象中封装的必须是目录
		 * 否则会发生空指针异常
		 * 如果访问的是系统级目录也会发生空指针异常
		 * 如果目录存在但是没有内容,会返回一个长度为0的数组。
		 * */
		File file = new File("C:\\");
		String[] list = file.list();//获取当前目录下所有的文件
		for (int i = 0; i < list.length; i++)
		{
			System.out.println(list[i]);
		}
public class Test
{
	public static void main(String[] args) throws Exception
	{
		fileList("E:\\",".jpg");
	}
	/**
	 * 遍历某目录下的某后缀的文件
	 * @param path 文件目录
	 * @param suffix 后缀
	 */
	public static void fileList(String path,String suffix) 
	{
		File file = new File(path);
		String[] files = file.list(new Filter(suffix));
		for (int i = 0; i < files.length; i++) {
			System.out.println(files[i]);
		}
	}
}	
/**
 * 用于实现FilenameFilter接口的类的实例用于过滤文件名
 */
class Filter implements FilenameFilter
{
	String suffix;
	public Filter(String suffix) {
		this.suffix = suffix;
	}
	@Override
	public boolean accept(File dir, String name) {
		return name.endsWith(suffix);
	}
}

File[] listFiles(FileFilter filter)
返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
File[] listFiles(FilenameFilter filter)
返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。

public class Test
{
	public static void main(String[] args) throws Exception
	{
		fileList("E:\\",".jpg");
	}
	
	/**
	 * 遍历某目录下的某后缀的文件
	 * @param path 文件目录
	 * @param suffix 后缀
	 */
	public static void fileList(String path,String suffix) 
	{
		File file = new File(path);
		File[] files = file.listFiles(new Filter(suffix));
		for (int i = 0; i < files.length; i++) {
			System.out.println(files[i]);
		}
	}
}
/**
 * 用于实现FilenameFilter接口的类的实例用于过滤文件名
 */
class Filter implements FilenameFilter
{
	String suffix;
	public Filter(String suffix) {
		this.suffix = suffix;
	}
	@Override
	public boolean accept(File dir, String name) {
		return name.endsWith(suffix);
	}
}
public class Test
{
	public static void main(String[] args) throws Exception
	{
		fileList("D:\\");
	}
	/**
	 * 遍历某目录下的某后缀的文件
	 * @param path 文件目录
	 */
	public static void fileList(String path) 
	{
		File file = new File(path);
		File[] files = file.listFiles(new Filter());
		for (int i = 0; i < files.length; i++) {
			System.out.println(files[i]);
		}
	}
}
/**
 * 实现FileFilter接口的类的实例用于过滤隐藏文件
 */
class Filter implements FileFilter
{
	@Override
	public boolean accept(File pathname) {
		
		return !pathname.isHidden();
	}
}

深度遍历:对指定目录进行所有内容的列出(包含字目录的内容)

public static void main(String[] args)
	{
		File file = new File("D:\\JAVA_jar\\c3p0-0.9.5.2");
		//判断此目录是否存在
		boolean exists = file.exists();
		if(exists)//存在 
		{
			deepFile(file);
		}
	}
	/**
	 * 遍历文件夹下所有的文件
	 * @param file 需要遍历的路径
	 */
	public static void deepFile(File file)
	{
		File[] files = file.listFiles();
		for (int i = 0; i < files.length; i++) {
			if(files[i].isDirectory())//是目录 
			{
				deepFile(files[i]);
			}
			System.out.println(files[i]);
		}
	}

删除一个带内容的目录

public static void main(String[] args)
	{
		File file = new File("D:\\c3p0-0.9.5.2");
		//判断此目录是否存在
		boolean exists = file.exists();
		if(exists)//存在 
		{
			removeDir(file);
		}
	}
	/**
	 * 删除一个带内容的目录
	 * @param file 需要删除的文件
	 */
	public static void removeDir(File file) 
	{
		File[] files = file.listFiles();
		for (File file2 : files) {
			if(file2.isDirectory()) 
			{
				removeDir(file2);
			}
			file2.delete();
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值