黑马程序员_java基础学习笔记07_IO流

-------  android培训 java培训 、期待与您交流! ----------



         在总结IO之前,我们需要先对异常和File做一个总结.File表示的是IO流操作的文件,我们要学习File类.在操作文件,即上传和下载文件中,可能会出现异常,因此需要学习异常,学习处理异常.

异常就是java程序在运行过程中出现的错误,是java对不正常情况进行描述后的对象体现.
异常在java中的继承体系为: Throwable类为java中所有异常和错误的父类,它有两个子类,Error(错误类)和Exception(异常类).Error是指程序出现严重问题,必须修改代码;Exception是程序出现一般问题,处理后,程序可继续运行.Exception类是java中所有异常类的父类,所有的子类名字都是以Exception做后缀的.Exception类分为两大类:RuntimeException(运行异常)和除运行异常以外的所有编译异常.
Throwable类的构造方法为: Throwable();     Throwable(String message)  传递的异常信息是自定义的
普通方法为: String getMessage() 返回异常信息的详细描述
    String toString()  返回异常信息的简短描述
    void printStackTrace()  将异常信息追踪至标准输出流
异常处理方法: try catch格式是
 try{
         可能引发异常代码
        }catch(异常类 变量){
<span style="white-space:pre">	</span>  处理异常
<span style="white-space:pre">	</span>}finally{
<span style="white-space:pre">	</span>  一定要执行
<span style="white-space:pre">	</span>}
当程序出现多个问题或者异常时,一个try可以跟随多个catch,每个catch捕获自己的异常,主要是看catch括号中写的是哪个异常类.当catch中写的异常类出现上下级关系时,上级异常写在上面的catch中时,会导致下面的异常永远失去作用,导致程序编译失败.因此,异常出现上下级关系时,级别越大的异常,越向后写.在JDK7中有一个新特性,就是异常都是平级关系时,可以合并在一个catch中.
Throw:当功能方法内部出现某种情况,程序不能继续运行,需要进行跳转时,就用throw把异常对象抛出。
Throws:定义功能方法时,需要把出现的问题暴露出来让调用者去处理。那么就通过throws在方法上标识。
throws和throws的区别:
throws: 用在方法声明后面,跟的是异常类名
可以跟多个异常类名,用逗号隔开
表示抛出异常,由该方法的调用者来处理
throws表示出现异常的一种可能性,并不一定会发生这些异常
  throw:   用在方法体内,跟的是异常对象名
      只能抛出一个异常对象名
      表示抛出异常,由方法体内的语句处理
      throw则是抛出了异常,执行throw则一定抛出了某种异常 
注意:处理异常时,程序功能内部可以处理,且后续程序需要运行时,则用try,若问题处理不了.后续程序不需要继续运行时,可交给调用者处理,选择用throws.

File类: 文件和目录路径名的抽象表示形式,将文件,文件夹,路径封装成对象,提供方法操作.
     构造方法: public File(String pathname)  传递字符串的路径名
     public File(String parent,String child)  获取字符串的父路径和子路径
     public File(File parent,String child)  
     创建功能: public boolean createNewFile()  创建文件
     public boolean mkdir()  创建文件夹
     public boolean mkdirs()  创建多层文件夹,若目录存在,则不创建
     删除功能: public boolean delete()  删除File构造器封装的路径,不会进回收站,直接永久删除
     重命名功能: public boolean renameTo(File dest)  重命名后,路径会变化,此方法带有剪切效果
     判断功能: public boolean isDirectory()
      public boolean isFile()
      public boolean exists()
      public boolean canRead()
      public boolean canWrite()
      public boolean isHidden()
     基本获取功能: public String getAbsolutePath()
     public String getPath()
     public String getName()
     public long length()
     public long lastModified()
     高级获取功能: public String[] list()
          public File[] listFile()
/*
 * File类的获取方法
 */
import java.io.*;
import java.util.*;
import java.text.*;
public class FileDemo {
	public static void main(String[] args) {
		method_4();
	}
	/*
	 * long length()
	 * 获取File构造方法中封装的文件的字节数
	 * 任何文件都是由字节组成的
	 */
	public static void method_4(){
		File file = new File("C:\\Windows\\mib.bin");
		long length = file.length();
		System.out.println(length);
	}
	/*
	 *  long lastModified() 
	 *  获取File构造方法中封装的文件的最后修改时间的毫秒值
	 */
	public static void method_3(){
		File file = new File("C:\\Windows\\mib.bin");
		long time = file.lastModified();
		System.out.println(time);
		//毫秒值变成看的懂的格式
		DateFormat df = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
		String date = df.format(new Date(time));
		System.out.println(date);
	}
	/*
	 * File getParentFile()
	 * 获取构造方法中封装的路径的父路径
	 * 返回值是File对象
	 */
	public static void method_2(){
		File file = new File("c:\\eclipse\\p2");
		File parent = file.getParentFile().getParentFile().getParentFile();
		System.out.println(parent);
	}
	/*
	 * String getParent()获取父路径
	 * 获取构造方法中封装的路径的父路径
	 */
	public static void method_1(){
		File file = new File("c:\\eclipse\\p2");
		String parent = file.getParent();
		System.out.println(parent);
	}
	/*
	 *  String getPath
	 *  将构造方法中封装的路径,转成一个字符串
	 */
	public static void method(){
		File file = new File("c:\\eclipse");
		String path = file.getPath();
		System.out.println(path);
		
		String path2 = file.toString();
		System.out.println(path2);
	}
}
/*
 *  File类获取功能
 *  list()  listFiles()
 *  获取File对象构造方法封装的路径中的内容
 *    一个路径下,包含很多子文件夹和文件
 */
import java.io.*;
public class FileDemo1 {
<span style="white-space:pre">	</span>public static void main(String[] args) {
<span style="white-space:pre">		</span>method();
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>/*
<span style="white-space:pre">	</span> * File[] listFiles()
<span style="white-space:pre">	</span> * File构造方法,写的路径,获取路径下的文件和文件夹
<span style="white-space:pre">	</span> * 返回File数组,获取全路径
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>public static void method_1(){
<span style="white-space:pre">		</span>File file = new File("c:\\eclipse");
<span style="white-space:pre">		</span>File[] files = file.listFiles();
<span style="white-space:pre">		</span>for(File f : files){
<span style="white-space:pre">			</span>System.out.println(f);
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>/*
<span style="white-space:pre">	</span> * String[] list()
<span style="white-space:pre">	</span> * File构造方法,写的路径,获取路径下的文件和文件夹
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>public static void method(){
<span style="white-space:pre">		</span>File file = new File("c:\\eclipse");
<span style="white-space:pre">		</span>String[] str = file.list();
<span style="white-space:pre">		</span>for(String s : str){
<span style="white-space:pre">			</span>System.out.println(s);
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}
}
     文件名称过滤器的实现:
/*
 * 获取文件,带过滤器
 * 过滤掉不需要的文件
 * 
 * listFiles(FileFilter filter) 
 * 传递参数,参数就是文件过滤器,参数FileFilter接口,java.io.FileFilter
 * 传递实现类
 * 自己写实现类,实现接口,重写方法
    boolean accept(File pathname) 
 */
import java.io.*;
class myFilter implements FileFilter{
	//在File类的 listFiles方法中,被调用的
	//传递参数pathname,结果就是listFiles()获取到的全路径
	//接收路径pathname,当方法返回的是真,路径装到集合中
	//文件名是.java文件返回真
	public boolean accept(File pathname){
		//判断传递参数pathname的文件名后缀是不是.java,如果是就返回true
		return pathname.getName().endsWith(".java");
	//	return true;
	}
}
public class FileDemo2 {
	public static void main(String[] args) {
		File file = new File("c:\\demo");
		File[] files = file.listFiles( new myFilter());
		for(File f : files){
			System.out.println(f);
		}
	}
}

递归:方法定义中调用方法本身的现象.必须要注意的是,使用递归时必须要有出口,否则为死递归;递归的次数不能过多,否则会造成内存溢出;构造方法不能递归使用.还有就是递归思想的本质,要找到计算的规律.
下面演示一个使用递归的案例:
/*
 * 兔子问题(斐波那契,数列)
 * 有1对兔子,繁衍下一代兔子
 * 
 * 有1对兔子,第一个月不生,第二个月不生,第三个月生1对小兔子,每个月都会生下1对小兔子
 * 生下来的小兔子,第一个月不生,第二个月不生,第三个月生1对小兔子,每个月都会生下1对小兔子
 * 如果兔子都不死,1年后,多少对兔子  144对
 * 
 * 1 1 2 3 5 8 13 21 34 55 89 144 斐波那契数列
 * n项和
 * 计算方式,有规律, 后面一项=前1项+前2项
 * 当n>2的时候
 * 从第三项开始,后面一项是前面2项的和
 */
public class DiGuiDemo2 {
	public static void main(String[] args) {
		System.out.println(fib(24));
	}
	/*
	 * 使用递归解决问题
	 */
	public static int  fib(int month){
		if(month==1 || month == 2)
			return 1;
		return fib(month-1)+fib(month-2);
	}
	/*
	 * 数组解决问题
	 */
	/*public static int fib(int month){
		//定义int数组,长度就月份
		int[] arr  = new int[month];
		arr[0] = 1;
		arr[1] = 1;
		for(int x = 2 ; x< arr.length ;x++){
			arr[x] = arr[x-1]+arr[x-2];
		}
		for(int x : arr){
			System.out.println(x);
		}
		return  arr[arr.length-1];
	}*/
}




     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值