流的基本介绍和操作对象规律以及file文件对象

注意:流读取文件的路径必须是绝对路径

 流按操作类型分为两种:
                * 字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
                * 字符流 : 字符流只能操作纯字符数据,比较方便。

IO流常用父类
            * 字节流的抽象父类:
                * InputStream
                * OutputStream
            * 字符流的抽象父类:
                * Reader

                * Writer

d: 方法介绍
            *  void close(): 关闭此输出流并释放与此流有关的所有系统资源。
            *  void write(byte[] b): 将 b.length 个字节从指定的 byte 数组写入此输出流
            *  void write(byte[] b, int off, int len) :将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。
            *  abstract void write(int b) : 将指定的字节写入此输出流。   

字节输出流FileOutputStream

FileOutputStream
            * 写入数据文件,学习父类方法,使用子类对象
        * b: FileOutputStream构造方法
            * 作用:绑定输出的输出目的
            * FileOutputStream(File file)
                * 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
            * FileOutputStream(File file, boolean append)
                * 创建一个向指定 File 对象表示的文件中写入数据的文件输出流,以追加的方式写入。
            * FileOutputStream(String name)
                * 创建一个向具有指定名称的文件中写入数据的输出文件流。
            * FileOutputStream(String name, boolean append)
                * 创建一个向具有指定 name 的文件中写入数据的输出文件流,以追加的方式写入。
        * c: 流对象使用步骤
            *  1. 创建流子类的对象,绑定数据目的
            *  2. 调用流对象的方法write写
            *  3. close释放资源
        * d: 注意事项
            * 流对象的构造方法,可以创建文件,如果文件存在,直接覆盖

a: 方法介绍
            *  void write(byte[] b): 将 b.length 个字节从指定的 byte 数组写入此输出流

            *  void write(byte[] b, int off, int len) :将指定 byte 数组中从偏移量 off 开始的 len 个字节写入

文件的续写和换行符号

* a: 文件的续写
            *  FileOutputStream构造方法, 的第二个参数中,加入true
        * b: 换行符号
            * 在文件中,写入换行,符号换行  \r\n

            * \r\n 可以写在上一行的末尾, 也可以写在下一行的开头

字节输入流InputStream

方法介绍
            * abstract  int read() :
                * 从输入流中读取数据的下一个字节。
            * int read(byte[] b)  
                * 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。
            * int read(byte[] b, int off, int len)
                * 将输入流中最多 len 个数据字节读入 byte 数组。
            * void close()

                * 关闭此输入流并释放与该流关联的所有系统资源。

字节输入流FileInputStream读取字节
        * a: 方法介绍
            * abstract  int read() :
                * 从输入流中读取数据的下一个字节,返回-1表示文件结束
            * int read(byte[] b)  
                * 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。
                * 读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。
            * int read(byte[] b, int off, int len)
                * 将输入流中最多 len 个数据字节读入 byte 数组。
            * void close()

                * 关闭此输入流并释放与该流关联的所有系统资源。

字符输入流读取文本FileReader类

* a: 方法介绍
            *  int read()
                * 读取单个字符
            * int read(char[] cbuf)
                * 将字符读入数组
            * abstract  int read(char[] cbuf, int off, int len)  
                * 将字符读入数组的某一部分。

* OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节

            * 将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去

 构造方法:
                    * OutputStreamWriter(OuputStream out)接收所有的字节输出流
                    * 字节输出流:  FileOutputStream       
                    * OutputStreamWriter(OutputStream out, String charsetName)
                    * String charsetName 传递编码表名字 GBK  UTF-8
InputStreamReader

缓冲流

BufferedOutputStream

构造方法:

                * BufferedOuputStream(OuputStream out)

                * 可以传递任意的字节输出流, 传递的是哪个字节流,就对哪个字节流提高效率 

BufferedInputStream

构造方法:
                * BufferedInputStream(InputStream in)
                * 可以传递任意的字节输入流,传递是谁,就提高谁的效率

                * 可以传递的字节输入流 FileInputStream

字符输出流缓冲流BufferedWriter

构造方法:
                * BufferedWriter(Writer w)传递任意字符输出流
                * 传递谁,就高效谁

                * 能传递的字符输出流 FileWriter, OutputStreamWriter

字符输出流缓冲流BufferedWriter特有方法newLine newLine()文本中换行

BufferedReader

构造方法:
                * BufferedReader(Reader r)
                * 可以任意的字符输入流
                   FileReader  InputStreamReader 

 

IO流对象的操作规律
    * A: IO流对象的操作规律
        * a: 明确一:要操作的数据是数据源还是数据目的。
            * 源:InputStream    Reader
            * 目的:OutputStream Writer
            * 先根据需求明确要读,还是要写。
        * b: 明确二:要操作的数据是字节还是文本呢?
            * 源:
                * 字节:InputStream
                * 文本:Reader
            * 目的:
                * 字节:OutputStream
                * 文本:Writer
        * c: 明确三:明确数据所在的具体设备。
            * 源设备:
                * 硬盘:文件  File开头。
                * 内存:数组,字符串。
                * 键盘:System.in;
                * 网络:Socket
            * 目的设备:
                * 硬盘:文件  File开头。
                * 内存:数组,字符串。
                * 屏幕:System.out
                * 网络:Socket
                * 完全可以明确具体要使用哪个流对象。
        * d: 明确四:是否需要额外功能呢?
            * 额外功能:
                * 转换吗?转换流。InputStreamReader OutputStreamWriter
                * 高效吗?缓冲区对象。BufferedXXX
                * 已经明确到了具体的体系上。

File文件对象:

* a: Output
            * 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作
        * b: Input

            * 把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作

File类是文件和目录路径名的抽象表示形式

File类静态的成员变量
        * a: pathSeparator
            * 与系统有关的路径分隔符,为了方便,它被表示为一个字符串
        * b: separator

            * 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串

File类构造方法_1
        * a: File(String pathname)
            * 通过将给定路径名字符串转换为一个File对象,之后可以使用File中的方法

            * windows中的路径或文件名不区分大小写

相对路径和绝对路径
        * a: 绝对路径
            * 绝对路径是一个固定的路径,从盘符开始
        * b: 相对路径
            * 相对路径相对于某个位置,在eclipse下是指当前项目下   
 File类的构造方法_2
        * a:File(String parent, String child)
            * 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 对象        

        * b: File(File parent, String child)

File创建文件的功能
                 *  boolean createNewFile()
                 *  创建的文件路径和文件名,在File构造方法中给出
                 *  文件已经存在了,不在创建

File类创建目录功能
        * a: 创建目录
            * public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了

            * public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来

File类删除功能
        * a: 删除功能

            * public boolean delete():删除文件或者文件夹(一个文件夹如果不是空的则不能删除)

File类获取功能
        * a: 方法介绍
            * String getName(): 返回路径中表示的文件或者文件夹名。获取路径中的最后部分的名字
            * long length(): 返回路径中表示的文件的字节数
            * String getAbsolutePath(): 获取绝对路径,返回String对象
            * File   getAbsoluteFile() : 获取绝对路径,返回File对象
                * eclipse环境中,写一个相对路径,绝对位置工程根目录
            * String getParent(): 获取父路径,返回String对象
            * File getParentFile(): 获取父路径,返回File对象       
File类判断功能
        * a: 方法介绍
            * boolean exists(): 判断File构造方法中封装路径是否存在。存在返回true,不存在返回false
            * boolean isDirectory(): 判断File构造方法中封装的路径是不是文件夹

            * boolean isFile(): 判断File构造方法中封装的路径是不是文件

 File类list获取功能
        * a: 方法介绍
            * String[] list():获取到File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)。返回只有名字数组
            * File[] listFiles():获取到,File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)* 返回的是目录或者文件的全路径
            * static File[] listRoots(): 列出可用的文件系统根

 文件过滤器
        * a: 作用
            * 过滤一个目录下的指定扩展名的文件,或者包含某些关键字的文件夹
        * b: 方法介绍
            * public String[] list(FilenameFilter filter)
            * public File[] listFiles(FileFilter filter)

public class MyFilter implements FileFilter{
                public boolean accept(File pathname)  {
                    /*
                     * pathname 接受到的也是文件的全路径
                     * c:\\demo\\1.txt
                     * 对路径进行判断,如果是java文件,返回true,不是java文件,返回false
                     * 文件的后缀结尾是.java
                     */
                    //String name = pathname.getName();
                    return pathname.getName().endsWith(".java");
                }
            }

文件过滤器_原理分析
        * listFiles()遍历目录的同时,获取到了文件名全路径,调用过滤器的方法accept,将获取到的路径传递给accept方法的参数pathname
        * accept方法接收了参数pathname,参数是listFiles传递来的
        * 在accept方法中,进行判断,如果这个路径是Java文件,返回true,走着返回false
        * 一旦方法返回了true
        * listFiles将路径保存到File数组中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值