Java学习之文件及异常处理

import java.io.File;

/*
 * 目的:从根目录遍历,找出该盘下所有以.avi以及.rmvb、.mp4结尾的文件
 * 
 *  1、遍历目录
 * 		是文件:
 * 			判断:
 * 				是:.avi或者.rmvb或者.mp4结尾的文件,输出文件地址以及文件名
 * 				不是:忽略  
 *		是目录:重复步骤1
 *			
 */
public class FileDemo {
	public static void main(String[] args) {
		File  F = new File("D:\\");
		File [] arrayFile = F.listFiles();
		for(File file:arrayFile){
			recursionFind(file);//调用函数处理
		//	System.out.println(file);
		}
		System.out.println("查找结束");
	}

	private static void recursionFind(File file) {
		// TODO Auto-generated method stub
		if(file.isFile()){//判断是否为文件
			if (file.getName().endsWith(".avi")||file.getName().endsWith(".rmvb")||file.getName().endsWith(".mp4")) {
				System.out.println(file.getPath()+"------"+file.getName());
			}
		}
		else if(file.isDirectory()){//判断是否为目录     注①
			File [] dir = file.listFiles();  //获取此文件夹下file列表   
			if(dir!=null){//判断是否为空,如果不为空则继续,为空会报错   NullPointerException  注②
				for(File sonfile:dir){
				//	if(sonfile!=null){//判断是否为空,如果不为空则继续,为空会报错    NullPointerException
						recursionFind(sonfile);
				//	}
				}
			}
		}
	}

}

  注①:isFile()与isDirectory()两个判断过后有第三种可能。

注②:目录下为空指针,C盘下此类目录尤其多

 

 

 

——————————————————————————————————————————————————————————————————————————————

 

File类的功能
A:创建功能

    public boolean createNewFile()创建新文件

    public boolean mkdir() 创建新目录

    public boolean mkdirs()  创建新目录,允许目录下面有目录

B:删除功能

  public boolean delete() 删除目录,如果目录中有内容,则删除失败

C:重命名功能

  public boolean renameTo(File dest)重命名文件,dest为重命名的名字,可以给出绝对路径,作为剪切功能使用
D:判断功能

  public boolean isDirectory()判断是否为一个目录

  public boolean isFile()判断是否为一个文件

  public boolean exists()判断文件是否存在

  public boolean canRead()判断是否可读

  public boolean canWrite()判断是否可写

  public boolean isHidden()判断是否为隐藏文件


E:获取功能

  public String getAbsolutePath()获取绝对路径

  public String getPath()//获取路径

  public String getName()//获取文件名

  public long length()//获取文件大小(单位为字节)

  public long lastModified()//获取最后一次修改的时间,返回的是一个long型数值time

      Date date = new Date(time);

      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

      String s = sdf.format(date);

      System.out.println(s);//获取到我们能看懂的时间

F:高级获取功能

  public String[] list()//返回一个字符数组,此目录下的文件名

  public File[] listFiles()//返回此目录下的文件列表

G:过滤器功能

    查询API

 

————————————————————————————————————————————————————————————————————————————

程序的异常:Throwable

  严重问题:Error  此类问题我们不能解决,这种问题一般很严重,例如:内存泄漏

  一般问题:Exception

    编译期问题:不是RuntimeException及其子类的异常必须进行处理,因为此类异常不处理,编译就不能通过,无法运行。

    运行期问题:RuntimeException及其子类,这类问题一般是代码不够严谨造成的,需要修正代码。

 

异常的处理:

JVM的默认处理

  把异常的名称,原因,位置等信息输出到控制台,但是程序不再继续执行。

程序员处理

  try...catch...finally

    自己编写处理代码,后面的程序可以继续执行

  throws

    把自己无法处理的问题在方法上声明,让调用者知道。

 

Throws和Throw的区别

Throws

  用在方法声明后面,跟的是异常类名

  可以跟多个异常类名,用逗号隔开

  表示抛出异常,由该方法的调用者来处理

  throws表示出现异常的一种可能性,该异常不一定发生

Throw

  用在方法体内,跟的是异常对象名

  只能抛出一个异常对象名

  表示抛出异常,由方法体内的语句处理

  Throw则是抛出了异常,执行Throw则一定抛出了某种异常

 

 

finally,final,finalize的区别

final:最终的意思,可以修饰类,成员变量,成员方法

  修饰类,该类不能被继承

  修饰变量,该变量是常量

  修饰方法,该方法不能被重写

finally:是异常处理的一部分,用于释放资源

一般来说,代码肯定会执行,特殊情况:在执行finally之前jvm推出了

finalize:是Objective类的一个方法,用于垃圾回收

 

 

下面的代码值得好好分析:在执行finally之前,return返回路径已经形成,即时执行finally中的语句,return的值依然不变,但是如果在finally中添加return语句,情况则不一样。

 

posted @ 2015-10-08 17:53  heshengbang  阅读(749)  评论(0编辑  收藏  举报