黑马程序员——IO流—整理笔记

来源:互联网 发布:阿里巴巴店铺推荐知乎 编辑:程序博客网 时间:2024/05/03 20:40

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

今天刚学完IO流,下面整理一下我的学习笔记。

        ①根据处理数据的数据类型的不同可以分为:字节流(抽象基类为InPutStream和OutPutStream)和字符流(抽象基类为Reader和Writer)。

         注意:由这四个类派生出来的子类名称都是以其父类名作为子类明的后缀。

        ②根据流向不同,可以分为:输入流和输出流。

字节流和字符流的区别:

       字符流,它的原理就是基于字节流读取字节时去查了指定的码表。它和字节流的区别有两点:1.在读取数据的时候,字节流读到一个字节就返回一个字节,字符流使用了字节流读到一个或多个字节时,先去查指定的编码表,再将查到的字符返回;2.字节流可以处理所有类型的数据,如jpg、avi、mp3、wav等等,而字符流只能处理字符数据。所以可以根据处理的文件不同考虑使用字节流还是字符流,如果是纯文本数据可以优先考虑字符流,否则使用字节流。

一、字符流

        字符流主要用来处理字符的,主要是对纯文本数据进行操作。其中子类有

        InputStreamReader/OutputStreamWriter:是字节流到字符流转换的桥梁;

        FileReader/FileWriter:对文件按字符流来进行操作;

        BufferedReader和BufferedWriter:这两个类对应的流使用了缓冲,能大大提高输入输出的效率。这两个也是过滤器流,常用来对InputStreamReader和OutputStreamWriter进行处理;  缓冲区流要用flush方法刷新,

代码示例:使用缓冲区拷贝文本文件

import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;//readLine()只返回换行符之前的值,不返回换行符public class MyBuffer{public static void main(String[] args) {BufferedReader bufr=null;BufferedWriter bufw=null;try {//定义输入输出字符流bufr=new BufferedReader(new FileReader("1.txt"));bufw=new BufferedWriter(new FileWriter("2.txt"));String line=null;while((line=bufr.readLine())!=null){//写入文件bufw.write(line);//缓冲区流要刷新bufw.flush();}} catch (IOException e) {e.printStackTrace();}finally{//关闭输入输出流if(bufr!=null){try {//关闭缓冲区流,其实就是关闭其中的流对象,所以流对象就不用再关闭了bufr.close();} catch (IOException e) {e.printStackTrace();}}if(bufw!=null){try {bufw.close();} catch (IOException e) {e.printStackTrace();}}}}



二、字节流

       字节流的子类有

         FileInputStream/FileOutputStream:字节流,(注意FileInputStream(path名,boolean)Boolean为true 表示拼接);

         BufferedInputStream/BufferedOutputStream 字节缓冲流 用于给节点流增加一个缓冲的功能。(典型的牺牲空间换时间)

        1.字节输入流:io包中的InputStream为所有字节输入流的父类。
                     Int read();读入一个字节(每次一个);
                     可先使用new byte[]=数组,调用read(byte[] b)
                     read (byte[])返回值可以表示有效数;read (byte[])返回值为-1 表示结束。 
         2.在流中close()方法由程序员控制。因为输入输出流已经超越了JVM的边界,所以有时可能无法回收资源。
         原则:凡是跨出虚拟机边界的资源都要求程序员自己关闭,不要指望垃圾回收。

代码示例:使用字节流拷贝图片

import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class MyStream{public static void main(String[] args) {FileOutputStream fos=null;FileInputStream fis=null;try {//定义输入输出字节流fos=new FileOutputStream("D:\\2.jpg");fis=new FileInputStream("D:\\1.jpg");byte[] b=new byte[1024];int len=0;//读取字节while((len=fis.read())!=-1){//写入文件fos.write(b,0,len);}} catch (IOException e) {e.printStackTrace();}finally{//关闭输入输出流if(fis!=null){try {fis.close();} catch (IOException e) {e.printStackTrace();}}if(fos!=null){try {fos.close();} catch (IOException e) {e.printStackTrace();}}}}}

 注:I/O流是很消耗性能,所以使用完后必须调用close()方法关闭流并释放资源。在关闭流时只关闭最外层的流即可。

      

、File类

一个File类的对象,表示了磁盘上的文件或目录,File类提供了与平台无关的方法来对盘上的文件或目录进行操作,File类直接处理文件和文件系统。File类没有指定信息怎样从文件读取或向文件存储。


下面的构造方法可以用来生成File 对象:

         File(StringdirectoryPath)

         File(StringdirectoryPath, String filename)

         File(FiledirObj, String filename

这个类的常用方法:exists(),delete(),getName(),getPath(),isDirectory(),isFile(),length(),
                        listFile(FileFilter),主要用来过滤文件这里有(可以用来嵌套内部类) 
                        mkdir(),mkdirs(),toString(),
         FileFilter接口只有accept方法,其返回值为Boolean型,可以在其里边写一些正则表达式来对文件进行筛选。
         这里需要注意的是传入accept的参数必须是final类型(匿名内部类的要求),这样他才能使用该类范围之外的队像。


目录管理

– 目录操作的主要方法为:

    – publicboolean mkdir() 根据抽象路径名创建目录。

   – publicString[] list() 返回抽象路径名表示路径中的文件名和目录名。

File类中的常用方法


 boolean

canExecute() 
          测试应用程序是否可以执行此抽象路径名表示的文件。

 boolean

canRead() 
          测试应用程序是否可以读取此抽象路径名表示的文件。

 boolean

canWrite() 
          测试应用程序是否可以修改此抽象路径名表示的文件。

 boolean

createNewFile() 
          当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。

 boolean

delete() 
          删除此抽象路径名表示的文件或目录。

 void

deleteOnExit() 
          在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。

 boolean

exists() 
          测试此抽象路径名表示的文件或目录是否存在。

 File

getAbsoluteFile() 
          返回此抽象路径名的绝对路径名形式。

 String

getAbsolutePath() 
          返回此抽象路径名的绝对路径名字符串。

 String

getName() 
          返回由此抽象路径名表示的文件或目录的名称。

 String

getParent() 
          返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。

 File

getParentFile() 
          返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。

 String

getPath() 
          将此抽象路径名转换为一个路径名字符串。

 boolean

isAbsolute() 
          测试此抽象路径名是否为绝对路径名。

 boolean

isDirectory() 
          测试此抽象路径名表示的文件是否是一个目录。

 boolean

isFile() 
          测试此抽象路径名表示的文件是否是一个标准文件。

 boolean

isHidden() 
          测试此抽象路径名指定的文件是否是一个隐藏文件。

 long

lastModified() 
          返回此抽象路径名表示的文件最后一次被修改的时间。

 long

length() 
          返回由此抽象路径名表示的文件的长度。

 String[]

list() 
          返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。

 boolean

mkdir() 
          创建此抽象路径名指定的目录。

 boolean

mkdirs() 
          创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。

 boolean

renameTo(File dest) 
          重新命名此抽象路径名表示的文件。

 boolean

setLastModified(long time) 
          设置此抽象路径名指定的文件或目录的最后一次修改时间。



------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

0 0
原创粉丝点击