JAVA IO流总结

1、File的说明:
        ①如何创建File类的实例:
            File(String filePath)
            File(String parentPath, String childPath)
            File(File parentPath,String childPath)
        ②路径:
            相对路径:相较于某个路径下,指明的路径
            绝对路径:包含盘符在内的文件或文件目录的路径
        ③路径分隔符:
            windows:\\
            linux:/
        ④File类的方法使用:
            1、public String getAbsolutePath() 获取绝对路径
            2、public String getPath() 获取路径
            3、public String getName() 获取名称
            4、public String getParent() 获取上层文件目录路径,如无,返回null
            5、public long length() 获取文件长度(字节数),不能获取目录的长度
            6、public long lastModified() 获取最后一次修改时间,毫秒值
            8、public String[] list() 获取指定目录下的所有文件或文件目录的名称数组
            9、public File[] listFiles() 获取指定目录下的所有文件或文件目录的File数组
            10、public boolean isDirctory() 判断是否是文件目录
            11、public boolean isFile() 判断是否是文件
            12、public boolean exists() 判断是否存在
            13、public boolean canRead() 判断是否可读
            14、public boolean canWrite() 判断是否可写
            15、public boolean isHidden() 判断是否隐藏
        ⑤File类的使用:
            1、File类的一个对象,代表一个文件或一个文件目录(文件夹)
            2、File类声明在java.io包下
            3、File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并未涉及到写入或读取文件内容操作;
                如果需要读取或写入文件内容,必须使用IO流来完成
            4、后续File类的对象常会作为参数传递到流的构造器中,指明读取或写入的"终点"
    2、IO流的分类
        ①按操作数据单位不同分为:字节流(8bit)、字符类(16bit)
        ②按数据流的流向不同分为:输入流、输出流
        ③按流的角色不同分为:节点流、处理流
            抽象基类    字节流        字符流
            输入流        InputStream  Reader
            输出流        OutputStream Write
        1、Java的IO流共涉及40多个类,实际上非常规则,都是从如下四个抽象基类派生的
        2、由这四个基类派生出来的子类名称都是以其父类名作为子类名后缀
    3、IO流体系结构
        抽象基类            节点流(或文件流)                                    缓冲流(处理流的一种)
        InputStream            FileInputStream(read(byte[] buffer))                BufferInputStream(read(byte[] buffer))
        OutputStream        FileOutputStream(write(byte[] buffer,0,len))        BufferOutputStream(write(byte[] buffer,0,len)) / flush()
        Reader                FileReader(read(char[] cbuf))                        BufferReader(read(char[] cbuf)) / readLine()
        Write                FileWrite(write(char[] cbuf,0,len))                    BufferWrite(write(char[] cbuf,0,len)) / flush()


    4、创建IO的读步骤:
        ①实例化File类的对象,指明要操作的文件
        ②提供具体的流(字符流、字节流)
        ③数据的读入
        ④流的关闭
        说明:
            read():返回读入的一个字符,如果到达文件末尾,返回-1
            异常处理:为了保证流资源一定可以执行关闭操作,需要使用try-catch-finally处理
            读入的文件一定要存在,否则报FileNotFoundException错误
    5、创建IO的写步骤:
        ①实例化File类的对象,指明要操作的文件
        ②提供FileWrite对象,用数据的写出
        ③写出的具体操作
        ④流的关闭
        说明:
            输出操作,对应的File可以不存在,不会报异常
            File对应的硬盘中的文件如果不存在,在输出的过程中,会自动创建此文件
            File对应的硬盘中的文件如果存在:
                如果流使用的构造器是:FileWrite(file,false) / FileWrite(file):对原有文件进行覆盖
                如果流使用的构造器是:FileWrite(file,true):不会对原有文件覆盖,而是在原文件基础上追加操作
    6、缓冲流:提高流的读取、写入的速度;提高速度的原因:内部提供了一个缓冲区
    7、转换流:提供了字节流和字符流之间的转换;字节流中的数据都是字符时,转成字符流操作更高效
        ①Java API提供两个转换流:
            InputStreamReader:将InputStream转换为Reader
            OutputStreamWrite:将OutputStream转换为Write
        ②用转换流多数来处理文件乱码问题,实现编码和解码的功能
        ③解码:字节、字节数组 --> 字符串、字符数组
         编码:字符串、字符数组 --> 字节、字节数组
        ④字符集:
            ASCII:美国标准信息交换码,用一个字节7位可以表示
            ISO8859-1:拉丁码表,欧洲码表,用一个字节8位可以表示
            GB2312:中国中文编码表,最多两个字节编码所有字符
            GBK:中国的中文编码表升级,融合了更多的中文字符号,最多两个字节编码所有字符
            Unicode:国际标准码,融合了目前人类使用的所有字符,为每一个字符分配了唯一的字符码,所有的文字都用两个字节来表示
            UTF-8:变长的编码方式,可以用1-4字节来表示一个字符
    8、标准的输入、输出流:
        System.in:类型是InputStream
        System.out:类型是PrintStream,其是OutputStream子类、FileOutputStream子类
        重定向:通过System类的setIn,SetOut方法对默认设备进行改变
        public static void setIn(InputStream in)
        public static void setOut(OutputStream Out)
    9、打印流:将基本数据类型的数据格式转化为字符串输出
        打印流:PrintStream和PrintWrite
            ①提供了一系列重载的print()和println()方法,用于多种数据类型的输出
            ②PrintStream和PrintWrite的输出不会抛出IOException异常
            ③PrintStream和PrintWrite有自动flush功能
            ④PrintStream打印的所有字符都使用平台的默认字符编码转换为字节;在需要写入字符而不是写入字节的情况下,应该使用PrintWrite类
            ⑤System.Out返回的是PrintStream的实例
    10、数据流:方便操作Java语言的基本数据类型和String的数据,可以使用数据流
        DataInputStream和DataOutputStream:用于读取或写出基本数据类型的变量或字符串
    11、对象流:用于存储和读取基本数据类型数据或对象的处理流:
        序列化:用ObjectOutputStream类保存基本数据类型或对象的机制
        反序列化:用ObjectInputStream类读取基本数据类型或对象的机制
        ObjectOutputStream和ObjectInputStream不能序列化static、transient修饰的成员变量
        序列化要求:
            ①需要实现序列化接口:Serializable
            ②当前类提供一个全局常量:serializableUID
                private static void final long serializableUID = 6645456564645L;
            ③除了当前xxx类需要实现Serializable接口之外,还必须保证其内部所有属性也必须是可序列化的(默认情况,基本数据类型是可序列化的)
    12、随机存取文件流:RandomAccessFile既可以作为输入流,又可以作为输出流
        ①RandomAccessFile类支持"随机访问"的方式,程序可以直接调到文件的任意地方来读、写文件
            只支持访问文件的部分内容
            可以向已存在的文件后追加内容
        ②RandomAccessFile对象包含一个记录指针,用以标识当前读写处的位置
            RandomAccessFile类对象可以自由移动记录指针:
                long getFilePointer():获取文件记录指针的当前位置
                void seek(long pos):将文件记录指针定位到pos位置
        ③构造器:
            public RandomAccessFile(File file,String mode)
            public RandomAccessFile(String name,String mode)
            创建RandomAccessFile类实例需要指定一个mode参数,该参数指定RandomAccessFile的访问模式:
                r:只读方式打开,不会创建文件
                rw:打开以便读取和写入,如果文件不存在则去创建文件
                rwd:打开以便读取和写入,同步文件内容的更新
                rws:打开以便读取和写入,同步文件内容和元数据的更新

posted @ 2022-05-29 08:30  田领群  阅读(9)  评论(0编辑  收藏  举报