Java I/O流(一)

2018-11-24  本文已影响0人  RicherYY

学习了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
小结:
上一篇下一篇

猜你喜欢

热点阅读