资源预览内容
第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
第9页 / 共9页
亲,该文档总共9页全部预览完了,如果喜欢就下载吧!
资源描述
Java学习笔记-IO流java的IO流学习笔记1、异常处理 java 2种异常处理: a:自己将该问题处理,然后继续运行(try catch) try . /可能产生异常的地方 catch(Exception e) e.printStackTrace(); . /出异常后,捕获异常进行处理,jvm默认就用这种方式处理异常 return; finally . /释放资源,一定会执行,比如关闭已打开的io流。 注意: 被finally控制的语句体一定会执行,特殊情况:在执行到finally之前jvm退出了(比如System.exit(0) return语句在执行之前,会检查有没有finally,如果有就将finally执行 b:将异常抛出(throws):定义功能方法时,需要把出现的问题暴露出来让调用者去处理。 public static void main(String args) throws Exception Person p = new Person(); p.setAge(-17); System.out.println(p.getAge(); throw的概述以及和throws的区别 throws:用在方法声明后面,跟的是异常类名; 可以跟多个异常类名,用逗号隔开; 表示抛出异常,由该方法的调用者来处理 throw:用在方法体内,跟的是异常对象名; 只能抛出一个异常对象名; 表示抛出异常,由方法体内的语句处理 也可以自定义异常: class AgeOutOfBoundsException extends Exception public AgeOutOfBoundsException() /不带参数的构造函数 super(); public AgeOutOfBoundsException(String message) /带参数的构造函数 super(message); final、finally、finalize区别 final:可以修饰类,不能被继承 ; 修饰方法,不能被重写 ; 修饰变量,只能赋值一次 finally:是try语句中的一个语句体,不能单独使用,用来释放资源 finalize:是一个方法,当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法 如果catch里面有return语句,finally的代码会执行,但是在finally中定义的变量值不会改变,会使用return之前语句的变量值 try x = 20;System.out.println(1/0);return x; catch (Exception e) x = 30;return x; finally x = 40;/return x; 千万不要在finally里面写返回语句 /结果会返回x=30 2、File类:文件和目录路径名的抽象表示形式 构造方法: File(String pathname) /根据一个路径得到File对象,pathname是个绝对路径C:UsersuserDesktopjavatest.txt File(String parent, String child) /parent目录 child目录或文件名称 File(File parent, String child) /parent 是File对象(目录的File对象),child 文件名称或者目录 基本的方法: File file = new File(a.txt); file.createNewFile(); /如果没有就创建,返回true file.mkdir(); /创建文件夹 如果存在这样的文件夹,就不创建了 file.mkdirs(aabb); /创建文件夹,如果父文件夹不存在,会帮你创建出来,创建2个层级目录 boolean isDirectory() /判断是否是目录 boolean isFile() /判断是否是文件 boolean exists() /判断是否存在 boolean canRead() /判断是否可读 boolean canWrite() /判断是否可写 boolean isHidden() /判断是否隐藏 boolean getAbsolutePath() /获取绝对路径 String getPath() /获取路径 String getName() /获取名称 long length() /获取长度。字节数 long lastModified() /获取最后一次的修改时间,毫秒值 练习:获取d盘目录下所有的txt文件 File dir = new File(E:); String arr = dir.list(); /获取d盘下所有的文件或文件夹 for (String string : arr) if(string.endsWith(.txt) /endsWith 判断是否以.txt结尾System.out.println(string); 3、IO流:IO流用来处理设备之间的数据传输,Java用于操作流的类都在IO包中。 流按流向分为两种:输入流,输出流。 流按操作类型分为两种: 字节流 (Byte:8位0/1): 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的 字节流的抽象父类: InputStream OutputStream字符流 (char:具体的大小由编码表决定): 字符流只能操作纯字符数据,比较方便。 字符流的抽象父类: Reader Writer 字节流使用: a、FileInputStream基本用法: FileInputStream fis = new FileInputStream(a.txt); /创建流对象 int b; /定义变量,记录每次读到的字节,注意使用的是int类型接受 while(b = fis.read() != -1) /将每次读到的字节赋值给b并判断是否是-1 System.out.println(b); /打印每一个字节 fis.close(); /关闭流释放资源 注意: read()方法读取的是一个字节,为什么返回是int,而不是byte? 因为字节输入流可以操作任意类型的文件,比如图片音频等,这些文件底层都是以二进制形式的存储的,如果每次读取都返回byte,有可能在读到中间的时候遇到111111111 那么这11111111是byte类型的-1,我们的程序是遇到-1就会停止不读了,后面的数据就读不到了,所以在读取的时候用int类型接收,如果11111111会在其前面补上 24个0凑足4个字节,那么byte类型的-1就变成int类型的255了这样可以保证整个数据读完,而结束标记的-1就是int类型。 b、FileOutputStream基本用法: FileInputStream fis = new FileInputStream(a.txt); /创建流对象 FileOutputStream fos = new FileOutputStream(b.txt); /创建输出流对象,关联b.txt int b; while(b = fis.read() != -1) fos.write(b); fos.close(); c、使用FileInputStream,FileOutputStream每次读取一个byte和写出一个byte效率太低了! 解决办法可以定义一个小数组接受 FileInputStream fis = new FileInputStream(a.txt); FileOutputStream fos = new FileOutputStream(b.txt); int len; byte arr = new byte1024 * 8; /自定义字节数组,默认缓冲的大小也是1024*8 byte while(len = fis.read(arr) != -
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号