java程序员从笨鸟到菜鸟之(三十四)File

IO流之前要先懂得如何封装硬盘上的以文件或者目录,使用File类;File类是用来描述文件或者目录(文件夹)的路径的抽象表现形式

本节我们就开始讨论File类

常用的构造方法
public File(String pathname):给定路径名以字符串来表示当前这个文件或者文件夹(开发中推荐使用第一种构造方法)
   public File(String parent,String child):根据 parent路径名字符串和 child路径名字符串创建一个新 File对象 
   public File(File parent, String child):根据 parent抽象路径名和 child 路径名字符串创建一个新 File实例
  需求:要表示当前计算机e盘下一个demo文件夹中的一个a.txt文件

实例1

package org.westos_01;

import java.io.File;
public class FileDemo {
	
	public static void main(String[] args) {
		
		//创建一个File实例---文件
		//方式1
		File file = new File("E:\\demo\\a.txt") ;
		System.out.println(file);
		
		//方式2
		File file2 = new File("E:\\demo", "a.txt") ;
		System.out.println(file2);
		
		//方式3
		File file3 = new File("E:\\demo") ;
		File file4 = new File(file3, "a.txt") ;
		System.out.println(file4);
	}
}
 使用File对象可以创建文件或者文件夹
   创建有关的成员方法
  public boolean mkdir()创建此抽象路径名指定的目录(文件夹)。
   注意:如果当前某个盘符下已经有了这个目录(文件夹),不会再创建了; 如果找不到文件的路径就会报错
  public boolean createNewFile():创建文件的,如果已经有这个文件了,不再创建。
   注意:该方法本身就会 编译时期异常IOException
   public boolean mkdirs()创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
    注意:可以在不存在的目录中创建文件夹---也就是 如果找不到当前路径,就会自己创建      
    注意事项:
         (1)自己要清楚要创建的是文件夹还是文件,每个方法都不一样!
         (2)没有带盘符,默认到当前项目下创建文件或者文件夹

实例2

package org.westos_02;

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

public class FileDemo {
	
	public static void main(String[] args) throws IOException {
		
		//需要在E盘下创建一个新的文件夹:demo
		//描述一下这个文件的抽象路径形式
		//用File对象来封装当前这个文件夹
		File file = new File("e:\\demo") ;
		//创建文件夹
		System.out.println("mkdir:"+file.mkdir());
		
		//public boolean createNewFile():创建文件:在E盘下的demo文件夹中创建a.xt文件
		File file2 = new File("E:\\demo\\a.txt") ;
		System.out.println("createNewFile:"+file2.createNewFile());
		
		//需求:在E盘下的test文件夹下创建一个b.txt文件
//		File file3 = new File("e:\\test\\b.txt") ;//创建文件之前,确保当前盘符下有这个文件夹,否则,IOEXception:系统找不到指定路径
//		System.out.println("createNewFile:"+file3.createNewFile());
		
		
		//public boolean mkdirs()
	    //需求:在e盘下创建aaa文件夹,在创建子目录bbb--->ccc--ddd
		
		//创建File对象来封装
		File file4 = new File("E:\\aaa\\bbb\\ccc\\ddd") ;
		//public boolean mkdirs()
		System.out.println("mkdirs:"+file4.mkdirs());
		
		没有带盘符,默认到当前项目下创建了文件
		File file5 = new File("a.txt") ; 
		System.out.println("createNewFile:"+file5.createNewFile());
		
	}
}
  如果不小心创建文件或者文件夹的时候,没有写盘符那么就会当前项目下进行创建
   public boolean delete()删除此抽象路径名表示的文件或目录
   注意事项:
   删除的方法 不能删除带有目录或者文件的文件夹
   删除多个目录,必须逐一删除!

实例3

package org.westos_03;

import java.io.File;

public class FileDemo {
	
	public static void main(String[] args) {
		
		//在当前项目下创建aaa\\bbb\\ccc
		File file = new File("aaa\\bbb\\ccc") ;
		System.out.println("mkdirs:"+file.mkdirs());
		
		//需求:要删除当前项目下的a.txt文件
		File file2 = new File("a.txt") ;//当前路径有此文件
		System.out.println("delete:"+file2.delete());
		
		//需求:删除aaa\\bbb\\ccc
		File file3 = new File("aaa\\bbb\\ccc") ;
		System.out.println("delte:"+file3.delete());
		
		File file4 = new File("aaa\\bbb") ;
		System.out.println(file4.delete());
		
		File file5 = new File("aaa") ;
		System.out.println(file5.delete());
	}
}
File类中的 重命名功能
   public boolean renameTo(File dest)重新命名此抽象路径名表示的文件。 
  1)使用这个功能: 当两个抽象路径一致,那么只是重命名
  2)当这两个 抽象路径不一致,剪切并且改名了

实例4

package org.westos_03;

import java.io.File;

public class FileDemo2 {
	
	public static void main(String[] args) {
		
		//现在要描述当前项目下有一个a1.jpg 
		File file = new File("a1.jpg") ;//当前路径应该有该图片
		
		//使用重命名功能:文件名称该成:a2.jpg
		File file2 = new File("a2.jpg") ;
		
		//调用功能
		file.renameTo(file2) ;
		
		//需求:将当前项目下的a1.jpg--->复制到e:\\a1.jpg
		File file3 = new File("a2.jpg") ;
		
		//E:\\a2.jpg
		File file4 = new File("E:\\a1.jpg") ;
		file3.renameTo(file4) ;
	}
}
 File类中的 判断功能
  public boolean isDirectory():判断是否是文件夹 经常用到
  public boolean isFile():判断是否是一个标准文件 经常用到
  public boolean canRead():判断是否可读
  public boolean canWriter():判断是否可写
  public boolean isHidden():判断是否是隐藏文件
  public boolean isAbsolute():判断次路径名是否是绝对路径
实例5
package org.westos_04;

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

public class FileDemo {
	
	public static void main(String[] args) throws IOException {
		
		//在当前项目下创建一个文件
		File file = new File("a.txt") ;
		//System.out.println(file.createNewFile());
		
		System.out.println(file.isDirectory());
		System.out.println(file.isFile());
		System.out.println(file.canRead());
		System.out.println(file.canWrite());
		System.out.println(file.isHidden());
		System.out.println(file.isAbsolute());
	}
}
  File类中的 获取功能
   public File getAbsolutePath():获取当前文件或者文件夹绝对路径
   public String getPath():获取相对路径
   public long length()返回由此抽象路径名表示的文件的长度
   public long lastModified()返回此抽象路径名表示的文件最后一次被修改的时间
   public String getName():获取名称
  实例6

package org.westos_04;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
public class FileDemo2 {

		public static void main(String[] args) {
			File file = new File("a.txt") ;
			
			//绝对路径
			System.out.println(file.getAbsolutePath());//E:\javacode\workspace\day17_File\a.txt
			//相对路径
			System.out.println(file.getPath());//a.txt
			System.out.println(file.getName());
			
			System.out.println(file.length());//描述文件内容 长度
			System.out.println(file.lastModified());//1511075302018	long:时间毫秒值
			
			//long---->Date---->String"日期文本格式"
			//创建日期对象
			Date d = new Date(1511075302018L) ;
			//创建一个SimpleDateFormat对象
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;
			
			//格式化
			String dateStr = sdf.format(d) ;
			System.out.println(dateStr);//2017-11-19 15:08:22
			
			
		}
}
  File类的 高级获取功能
   public String[] list():返回对象是一个字符串数组,当前哪个一盘符下的所有的文件以及文件夹的字符串名称数组
   public File[] listFiles():返回对象是一个File数组,当前哪个盘下的所有的文件以及文件夹的File数组
  实例7

package org.westos_05;

import java.io.File;
public class FileDemo {
	
	public static void main(String[] args) {
		//需求:获取e盘下所有的文件夹以及文件的字符串名称数组

		//用File对象封装下e盘
		File file = new File("E:\\") ;
		
				public String[] list()
		String[] strArray = file.list() ;
		//遍历:遍历之前,一定要做非空判断
		if(strArray!=null){
			//增强for遍历
			for(String s:strArray){
				System.out.println(s);
			}
		}
		
		System.out.println("------------------------------------------");
		//public File[] listFiles():
		File[] fileArray = file.listFiles() ;
		if(fileArray !=null){
			for(File f :fileArray){
				System.out.println(f.getName());
			}
		}
		
	}
}
  练习1

package org.westos_05;

import java.io.File;

/**
 * 判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
 * 	
 * 分析:
 * 		1:用File对象封装E盘
 * 		2:获取当前e盘下的所有的文件以及文件夹的名称数组或者File数组
 * 		3):针对对象要做非空判断
 * 		4)遍历:File数组增强for遍历
 * 			获取每一个File对象
 * 			判断这个File对象是否是文件:isFile()
 * 			如果是文件,还要判断是否以.jpg结尾
 * 			是,就输出
 * 			不是,不管
 * @author Apple
 */
public class FileTest {
	
	public static void main(String[] args) {
		
		//1)封装E盘
		File srcFile = new File("e:\\") ;
		
		//2)获取当前e盘下的所有的文件以及文件夹的File数组
		File[] fileArray = srcFile.listFiles() ;
		//3)给当前对象判断
		if(fileArray !=null){
			//增强for遍历这个File数组
			for(File file :fileArray){
				//获取到每一个file对象
				if(file.isFile()){
					//是文件
					//要需要判断是否以.jpg结尾的文件
					if(file.getName().endsWith(".jpg")){
						System.out.println(file.getName());
					}
				}
			}
		}
	}
}
练习2

package org.westos_05;

import java.io.File;
import java.io.FilenameFilter;

/**
 * 判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
 * 
 * 方式1:封装,然后获取所有的文件以及文件夹的File数组,遍历,判断...输出
 * 方式2:在获取的时候就已经满足条件
 * 
 * 引出:文件名称过滤器			-------Javaweb中将过滤器以及上传和下载.
 * public String[] list(FilenameFilter filter)
 * public File[] listFiles(FileFilter filter)
 * 
 * 参数是一个接口,(开发中使用的接口的匿名内部类的方式)
 * 	实现一个方法:
 * 	boolean accept(File dir, String name):这个方法的返回值是true(就是表示要将当前文件夹或者文件的名称添加数组中),false(表示不添加数组中)
 * @author Apple
 */
public class FileTest2 {
	
	public static void main(String[] args) {
		
		//1)封装e盘
		File file = new File("e:\\") ;
		
		//2)public String[] list(FilenameFilter filter)
		String[] strArray = file.list(new FilenameFilter() {
			
			@Override
			public boolean accept(File dir, String name) {
//				return false;
				
				//该逻辑是需要根据需求来判断的
				//该方法中的返回值是需要我们自己判断的,根据需求做逻辑判断
				/*File file = new File(dir, name) ;
				//判断File是否是文件
				boolean flag1 = file.isFile() ;
				//如果是文件,还要判断是否以".jpg"结尾
				boolean flag2 = name.endsWith(".jpg") ;
				
				return flag1 && flag2 ;*/
				
				return new File(dir,name).isFile() && name.endsWith(".jpg") ;
			}
		});
		
		//遍历字符串数组
		for(String s : strArray){
			System.out.println(s);
		}
	}
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值