在总结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,每个catch捕获自己的异常,主要是看catch括号中写的是哪个异常类.当catch中写的异常类出现上下级关系时,上级异常写在上面的catch中时,会导致下面的异常永远失去作用,导致程序编译失败.因此,异常出现上下级关系时,级别越大的异常,越向后写.在JDK7中有一个新特性,就是异常都是平级关系时,可以合并在一个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>}
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]; }*/ }
黑马程序员_java基础学习笔记07_IO流
最新推荐文章于 2024-07-17 00:17:15 发布