美文网首页
Java I/O流(一)

Java I/O流(一)

作者: RicherYY | 来源:发表于2018-11-24 20:26 被阅读0次

    学习了Java中的i/o流来读取文件

    1.File类的操作文件和目录属性
    2.字符流字节流讲解
    3.使用字节流读写文件
    4.使用字符流读写文件
    5.字节流读写二进制文件
    6.使用对象流,对象的序列化

    详解

    1.对文件进行操作。

    大概有的东西是文件的创建和判断文件存在不存在
    了解就行,不是重点。

    2.字节流和字符流的讲解

    --- 字节流 字符流
    输出流 OutputStream 字节输出流 Writer 字符输出流
    输入流 InputStream 字节输入流 Reader 字符输入流

    以上算是、四大基流都是抽象类,其他流都是继承四大流的。

    • 我们不能创建四大基流的对象只能创建其子类对象
    • 所有流都有关闭方法

    操作I/O流的模板

    1.创建源或者目标对象(挖井)
    输入操作:把文件中的数据流向程序中,此时文件是源,程序是目标对象
    输出操作:把程序中的数据流向文件中,此时程序是源,文件是目标对象

    2.创建IO流对象(水管)
    输入操作:创建输入流对象
    输出操作:创建输出流对象

    3.具体的I/O操作
    输入操作:使用输入流对象的read()方法
    输出操作:使用输出流对象的write()方法

    4.关闭资源(勿忘)
    输入操作:关闭流close()方法
    输出操作:关闭流close()方法

    I/O流的六字真言

    读进来写出去
    读进来,强调输入利用输入流的read()方法
    写出去,强调输出利用输出流的write()方法

    文件流

    程序和文件之间的联系就是文件流
    FileInputSteam:文件字节输入流
    FileOutputSteam:文件字节输出流
    FileReader:文件字符输入流
    FileWriter:文件字符输出流

    3.字节流

    字节流暂时不要用中文

    输出流

    FileOutputSteam 示例:

    public class FileSteamDome   {
        
        public static void main(String[] args) throws IOException{
            //1.创建源或目标文件
            File f = new File("D:/myDoc/123.txt");
            
            //2.创建IO流对象(建立水管)
            FileOutputStream fos = new FileOutputStream(f,true); 
            
            //3.实现IO操作
            //FileOutputStream 方法
            /*
             * void write(byte[] b) 
             * 将 b.length个字节从指定的字节数组写入此文件输出流。 
             *  
             * void write(byte[] b, int off, int len) 
             * 将 len字节从位于偏移量 off的指定字节数组写入此文件输出流。  
             * 
             *  
             */
            
            //传一个字节的情况
            fos.write(65);
            //传多个字节的情况
            String str = "好好学习天天向上";
            //将字符串赋值给一个字节数组,因为只有字节数组才能传输
            byte[] words = str.getBytes();
            //写到文件中
            fos.write(words,0,words.length);
            
            //4.关闭流
            fos.close();    
        }
        
    }
    
    

    Ps:FileOutputStream构造方法中有一个布尔值用来判断是否追加文字。
    输入结果


    输出流结果.PNG

    输入流示例

    public class FileInputSteamDome {
        public static void main(String[] args) throws IOException {
            //1.创建源
            File f = new File("D:/myDoc/123.txt");
            
            //2.创建IO流对象
            FileInputStream fis =  new FileInputStream(f);
            
            
            //3.实现IO操作
            /*
             * int read() 
             * 从该输入流读取一个字节的数据。  
             * int read(byte[] b) 
             * 从该输入流读取最多 b.length个字节的数据为字节数组。  
             * int read(byte[] b, int off, int len) 
             * 从该输入流读取最多 len字节的数据为字节数组。  
             * 
             */
            
            //读一个字节的情况
    //      int data = fis.read();
    //      System.out.println(data);
    //      System.out.println(fis.read());
    //      System.out.println(fis.read());
    //      System.out.println(fis.read());
    //      System.out.println(fis.read());
    //      System.out.println(fis.read());
    //      System.out.println(fis.read());
    //      System.out.println(fis.read());//读不到东西就返回-1
            
            
            //读多个字节的情况
            //需要一个字符数组来接收数据
            byte[] buffer = new byte[1024];
            
            //需要有一个int类型变量来接收读取到的值
            int len ;
            /*
             * 1.因为不知道要循环多少次所以使用while循环
             * 2.现阶段所有数据都存储在buffer字节数组中要读取出来
             * 3.要利用String的构造方法String(byte[] bytes, int offset, int length)
             * 从第0个开始一直读到len的位置
             */
            while((len = fis.read(buffer))!= -1) {
                String str = new String(buffer, 0, len);
                System.out.println(str);
            }
            
            
            //4.关闭流
            fis.close();    
        }
    }
    

    打印结果

    ABCDEFG
    
    小结:
    • 利用字符流的时候要记得是流的是字节所以需要byte数组来接收
    • 使用I/O流进行传输数据的时候不要忘了四个步骤:
      1.创建源对象(挖井)
      2.创建IO对象(做管道)
      3.具体操作IO实现数据读写
      4.关闭流

    相关文章

      网友评论

          本文标题:Java I/O流(一)

          本文链接:https://www.haomeiwen.com/subject/iaqrfqtx.html