java.io类

一、IO类的基本知识

1、字节流可以读文本文件和非文本文件

2、字符流只能读文本文件

3、当输出流到文件时,如果文件不存在,会自动创建文件;当文件存在时,会自动覆盖掉之前的文件。

4、节点流只有FileInputStream、FileOutputStream、FileReader、FileWriter这四个。其他的全是处理流。

5、当关闭输入流或者输出流的时候,只关闭最外层的流就可以了

二、File类(此对象对应着文件或者文件目录):

        File file = new File("");  //这个文件目录是相对于System.getProperty("user.dir")这个路径来说的
        File file2 = new File("/");  //这个文件目录就是绝对路径,根目录

File类注意事项:同一级文件系统下不允许同时存在相同名字的目录或文件,目录名和文件名不能相同(带后缀的目录“root.txt”和文件“root.txt”也不能同时存在),但是root.txt和root可以同时存在,因为“root.txt”和“root”会被判断两个不同的名字;即如果文件系统下有root目录,那么在这里名为root的文件是创建不出来的,如果文件系统下有root文件,那么在这里名为root的目录是创建不出来的。

1、createNewFile创建文件

2、exists文件是否存在

3、FileInputStream文件输入的流

4、getAbsolutePath获取绝对路径

5、toPath

三、IO流

1、抽象基类

InputStream,OutputStream,Writer,Reader

2、节点流

FileInputStream,FileOutputStream,FileWriter,FileReader,ByteArrayInputStream(需要用缓冲流包装),ByteArrayOutputStream(这个不需要缓冲流包装)

3、处理流(包装节点流)

(1)缓冲流(四个)

缓冲流的原理:本质上也是一个阻塞操作,只不过阻塞的次数比较少而已,因为它一次性读的数据比较多(8192)。

①  BufferedInputStream

      BufferedOutputStream-->flush

   BufferedReader-->readLine

   BufferedWriter-->flush

②  flush的使用

   flush如果缓冲区不满,强制输出。如果缓冲区满了的话,就会自动输出,就不用flush了。close方法也会强制输出。

(2)转换流(缓冲流包装转换流,转换流包装节点流)

  InputStreamReader  字节数组转换成字符串

  OutputStreamWriter  字符串转换成字节数组

(3)标准输入流

  System.in是个字节流

(4)打印流(包装节点流)

  PrintStream

(5)数据流(包装节点流)

  数据流(针对基本数据类型,字符串,字节数组)

  DataOutputStream

  DataInputStream

(6)对象流(包装节点流)

①这个对于static、transient修饰的属性是不起作用的

②序列化的对象必须实现Serializable

③显示定义SerializableID。首先,一是为了区分同一类的不同版本。其次,另一个是通过这个号识别那些文件属于一个类只是版本不同而已

  ObjectOutputStream

  ObjectInputStream

(7)随机访问文件流(单独使用)

  RandomAccessFile

二、java io方式读取字符串

    public static void main(String[] args) throws Exception{
        File file = new File("test.txt");
        Reader is = new FileReader(file);
        char[]  buffer = new char[10];
        StringBuffer str = new StringBuffer();
        int len = 0;
        while((len=is.read(buffer))!=-1) {
            System.out.println(len);
            str.append(buffer,0,len);    
        }
        System.out.println(str);
        System.out.println(Charset.defaultCharset());
        is.close();
    }

 

 

参考文献

java IO流:https://www.cnblogs.com/ningvsban/p/3600185.html

 

原文地址:https://www.cnblogs.com/erdanyang/p/10149636.html