IO从浅入深

1       流的概念:

l  流是有方向的,有顺序的字节概念

n  I:in             输入         读

n  O:out     输出         写

2       IO流的分类

a. 操作方向不同分为: 输入流输出流

b. 操作类型不同分为: 字节流字符流

3       字节流与字符流的比较

l  字节流可以操作所有的类型(如图片、avi、ppt、docx),而字符流只能处理字符类型

l  字节流以字节为单位(8bit),而字符流以字符为单位。(2~3个字节)

字节流本身是不会使用到缓冲区的,对文件直接操作;而字符流会用到缓冲区,因为字符流在操作时是放置在缓冲区中,在清空缓冲区或文件关闭时才写到文件中去的。

l  结论:推荐使用字节流

4       常用接口和类

l  File(C)

l  OutputStream(AC)

l  InputStream(AC)

l  Writer(AC)

l  Reader(AC)

l  RandomAccessFile(C)

结构图

5       File 文件类:操作文件或文件夹的类

1.1     属性

l  路径分隔: File.separator

1.2     方法

1.1.1     构造方法

l  new File(String path)

l  new File(Stint parent,String child)

l  new File(File parent,String child)

1.1.2     普通方法

l  mkdir():    创建当前层文件夹,要求父类必须存在

l  mkdirs(): 创建多层文件夹,父类可以不存在[有则使用,无则创建]

l  exists():    是否存在

l  createNewFile():创建文件[有则使用,无则创建]

l  isDirectory():是否是目录

l  isFile():是否是文件

l  getName():得到文件名称

l  String[] list():得到文件夹中的所有内容名称

l  File[] listFiles():得到文件夹中所有内容本身对象

l  File []listFiles(FilenameFilter):根据文件名筛选得到文件夹中所有内容本身对象

l  File []listFiles(FileFilter):根据文件名筛选得到文件夹中所有内容本身对象

注:FileNameFilter或FileFilter是遍历当前文件夹下 符合过滤条件 的内容,

如需要所有层目录过滤,还只能用listFiles(),然后根据名称做出处理。

1.1.3     获得所文件夹下的内容,使用递归算法

File f = new File("a");

    privateintlevel=0;

    private  void recusion(File file) {

        for(int i=0;i<level;i++)

            System.out.print(" ");

        System.out.println(file.getName());

       

        if(file.isDirectory()){

            level++;

            //得到当前文件夹下  符合条件  所有内容对象

            File[]fs= file.listFiles(new FileFilter() {

                @Override

                publicboolean accept(Filefile) {

                    if(file.getName().contains("c"))

                        returntrue;

                    returnfalse;

                }

            });

            for(File f:fs){

                //递归,自己调用自己

                recusion(f);

            }

            level--;

        }

    }

6       字节流

1.1    输出流的基类OutputStream(AC)

1.1.1    FileOutputStream 文件输入流【无则创建,有则覆盖,除非设置追加写

l  FileOutputStream(File file)

l  FileOutputStream(File file,boolean append)

l  FileOutputStream(String name)

l  FileOutputStream(String name,boolean append)

1.1.2     BufferedOutputStream 缓冲输出流

1.1.3     ByteArrayOutputStream 内存输出流【不重要】

1.1.4     ObjectOutputStream   对象输出流[对象流]

l  特有的方法

n  writeObject(Object)

n  write基本数据类型

1.1.5     DataOutputStream 数据输出流[数据流]

l  特有的方法

n  write基本数据类型

1.1.6     PrintStream                   打印流

l  特有的方法

n  print()       ==     write()      不换行

n  println():  识别系统,自动换行

1.2     输入流的基类InputStream(AC)

1.1.1    FileInputStream 文件输入流【无则报异常,有则读取】

l  FileInputStream(File file)

l  FileInputStream(String name)

1.1.2     BufferedInputStream 缓冲输入流

1.1.3     ByteArrayInputStream 内存输入流【不重要】

1.1.4     ObjectInputStream 对象输入流【对象流】

l  特有的方法

n  Object readObject();

n  read八种基本类型

1.1.5     DataInputStream          数据输入流[数据流]

l  特有的方法

n  read八种基本类型

1.1.6     PushbackInputStream 回退流

l  特有的方法

n  unread()

1.1.7     SequenceInputStream 序列输入流【合并流】

1.3     覆盖写与追加写,本质其它是看文件流的参数

l  覆盖写,覆盖文件

n  new  FileOutputStream(String);              //覆盖文件

n  new  FileOutputStream(File);                  //覆盖文件

u  write()

u  write()

u  write()

l  追加写,使用文件

n  new FileOutputStream(String,boolean);       //使用文件

n  new FileOutputStream(File,boolean);           //使用文件

u  write()

u  write()

u  write()

1.4     序列化与反列化[前提:类实现Serializable接口]

1.4.1    序列化:把对象写入介质中

1.4.2     反序列化:从介质中读取对象

7       字符流

1.1    Writer 字符写入流的基类

1.1.1    FileWriter:文件字符写入流【无则创建,有则覆盖,除非设置追加写

1.1.2     OutputStreamWriter:字节字符转换写入流,

作用:按指定编码写入到文件

l  OutputStreamWriter(OutputStream,String)

1.1.3     BufferedWriter:缓冲字符写入流

1.1.4     CharArrayWriter:字符数组写入流【内存流】

1.1.5     StringWriter:   字符串写入流[内存流]

1.1.6     PrintWriter:        字符打印流

l  特有的方法

n  print()

n  println()             根据系统,自动换行

1.2     Reader 字符读取流的基类

1.1.1    FileReader:文件字符读取流【无则报异常,有则读取】

1.1.2     InputStreamReader:字节字符转换输入流

作用:按指定编码读取文件

l  InputStreamWriter(InputStream,String)

1.1.3     BufferedReader:缓冲字符读取流

1.1.4     CharArrayReader:字符数组读取流【内存流】

1.1.5     StringReader:    字符串读取流[内存流]

1.1.6     PushbackReader:字符回退流

l  特有的方法

n  unread()

1.1.7     LineNumberReader:行号读取流

l  特有的方法

n  getLineNumber()

8       RandomAccessFile:随机访问文件

l  在java.io包下,它可以对文件进行处理

l  特点:

n  即可读

n  又可写

l  特有:

n  读写基数数据类型

n  按行读取

n  seek(int) 设置文件指针的偏移量

n  skipBytes(int) 忽略掉的字节

l  练习:文件拷贝

l  回顾:

n  可以读写基本数据类型的文件流

u  RandomAccessFile

u  ObjectInputStream

u  ObjectOutputStream

u  DataInputStream

u  DataOutputStream

n  可以读写对象的文件流

u  ObjectInputStream

u  ObjectOutputStream

n  可以按行读取

u  BufferedReader

u  LineNumberReader

u  RandomAccessFile

n  先进后出

u  Stack

9       编码格式

l  Iso-8859-1        :        西欧码              英文1个字节,中文1个字节

l  Gb2312             :        简体中文         英文1个字节,中文2个字节

l  Gbk                     :        中文                   英文1个字节,中文2个字节

Utf-8                  :        全球统一编码英文1个字节,中文3个字节

l  Utf-16                :   全球唯一编码 英文2个字节,中文3个字节

猜你喜欢

转载自blog.csdn.net/select_bin/article/details/79863115