美文网首页
javase part21 IO流

javase part21 IO流

作者: 不再饿肚子给人送饭 | 来源:发表于2017-11-30 23:27 被阅读0次

在计算机中文件的分类

  • 二进制文件
  • 文本文件

在java中流的分类

  • 字节流:操作二进制文件
  • 字符流: 操作文本文件

流: stream 系列的都是字节流

  • InputStream 输入字节流的超类
  • OutPutStream 输出字节流的超类
  • FileInputStream 文件输入流,用于从文件中获得字节输入流
  • FileOutputStream 文件输出流
  • BufferedInputStream InputStream的子类,使用装饰者模式对FileInputStream进行装饰
  • BufferedOutputStream
  • DataInputStream:InputStream的子类,使用装饰者模式对输入输出流进行装饰,将变量输出到流
  • DataOutputStream: 将数据读出,按照顺序读出
图片.png

字节流使用


图片.png

使用FIleInput/OutputStream

//使用FileInput / OutputStream
//一个字节一个字节搞,太慢,可以使用BufferedInputStream提高速度
@SuppressWarnings("resource")
    public static void main(String[] args) {
        try {
            FileInputStream fileInputStream = new FileInputStream(new File("d:/img/1.mp4"));
            FileOutputStream fileOutputStream = new FileOutputStream(new File("d:/img/2.mp4"));
            int len = -1;
            while ((len = fileInputStream.read())!=-1) {
                fileOutputStream.write(len);
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
拷贝一个100M的视频所需时间(未使用缓存).png

使用BufferedInput/OutputStream ,这个类自带buff 为8K

@SuppressWarnings("resource")
    public static void main(String[] args) {
        try {
            BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("d:/img/1.mp4"));
            BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream("d:/img/2.mp4"));
            int len = -1;
            while ((len=bufferedInputStream.read())!=-1) {
                bufferedOutputStream.write(len);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
使用自带buff的流来拷贝.png

使用DataInput / OutStream
数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。

DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream(new File("d:/img/1.txt")));
        dataOutputStream.writeInt(132);
        dataOutputStream.writeDouble(0.01);
        dataOutputStream.writeUTF("这是一个字符串");

//读取刚才通过DataOutputStream 写入的数据
//要按照写入的顺序读取
DataInputStream dataInputStream = new DataInputStream(new FileInputStream(new File("d:/img/1.txt")));
        int readInt = dataInputStream.readInt();
        double readDouble = dataInputStream.readDouble();
        String readUTF = dataInputStream.readUTF();
        System.out.println(readInt);
        System.out.println(readDouble);
        System.out.println(readUTF);

使用ObjectInput / OutputStrem 之前,需要将要写入的对象的类序列化,不然会引发异常

图片.png
//将一个student对象写入

public class Student implements Serializable {
    
    private static final long serialVersionUID = 1L;
    private String name;
    private String address;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    
    public Student() {
        super();
    }
    public Student(String name, String address) {
        super();
        this.name = name;
        this.address = address;
    }
}

ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("d:/img/1.abc")));
objectOutputStream.writeObject(student);

//尝试将对象读出来
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(new File("d:/img/1.abc")));
Student student2 = (Student) objectInputStream.readObject();
System.out.println(student2);

字符流使用
通过字符流可以很方便的将字符写入writer

图片.png

使用BufferedWriter/Reader
使用完Buffered后如果没有flush和close,数据将不会被写入进文件

//bufferWriter 若目标文件不存在,会自动创建文件
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("d:/img/2.abc"))));     
bufferedWriter.write("这个是一个字符串");
bufferedWriter.write("qweasd");
            
bufferedWriter.flush();
bufferedWriter.close();


//使用BufferedReader来将数据读出
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("d:/img/2.abc")));

String string = null;
StringBuilder stringBuilder = new StringBuilder();
            
while ((string = bufferedReader.readLine())!=null) {
        stringBuilder.append(string);
}

使用FileWriter/Reader
若文件不存在,将自动创建文件

FileWriter fileWriter = new FileWriter(new File("d:/img/2.txt"));
fileWriter.write("这是一个字符串");
fileWriter.write("\n");
fileWriter.write("这是一个字符串2哦");
            
fileWriter.flush();
fileWriter.close();

//读取数据
FileReader fileReader = new FileReader(new File("d:/img/2.txt"));
int len = -1;
StringBuilder stringBuilder = new StringBuilder();
char[] buff = new char[512];
while ((len = fileReader.read(buff)) != -1) {
    stringBuilder.append(buff, 0, len);
}
System.out.println(stringBuilder);

使用OutputStreamWriter/InputStreamReader
如果目标文件不存在,将会创建文件


图片.png
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream("d:/img/3.txt"));
        outputStreamWriter.write("这是一个男字符串");
        outputStreamWriter.write("这是一个女字符串");

        outputStreamWriter.flush();
        outputStreamWriter.close();
        
      //读取数据
        InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("d:/img/3.txt"));
        int len = -1;
        char[] buff = new char[512];
        StringBuilder sBuilder = new StringBuilder();
        while ((len = inputStreamReader.read(buff))!=-1) {
            sBuilder.append(buff,0,len);
            
        }
        System.out.println(sBuilder);

相关文章

  • javase part21 IO流

    在计算机中文件的分类 二进制文件文本文件 在java中流的分类 字节流:操作二进制文件字符流: 操作文本文件 流:...

  • JavaSE笔记-IO流

    Java中常见的IO流有关的类有如下: 字节流 InputStream 字节输入流的基类(抽象) OutputSt...

  • javaSe-IO流

    为什么称为流?所有数据对于计算机来说都是以细化的小单位存储的,所以让他们一起输入输出就像流水一样,一股数据才是一个...

  • JavaSE学习笔记——IO流

    java.io包File类:Java程序中的一个对象,对应着硬盘中的一个文件或者网络中的一个资源。File fil...

  • javase part21 File

    java中文件的类File 文件和目录路径名的抽象表示形式java中表示一个路径: String path = "...

  • JavaSE总结(9)IO流(1)

    一、IO流: IO流: input输入(流向内存) 读取数据 output输出(流出内存) 写出数据 IO...

  • JavaSE总结(10)IO流(2)

    一、java.io.BufferedOutputStream extends OutputStream 字节输出缓...

  • JavaSE进阶九 IO流二

    File类 File类和四大家族没有关系,所以File类不能完成文件的读和写。 File对象代表什么?文件和目录路...

  • JavaSE进阶九 IO流一

    1,IO流的概述 IO流,什么是IO? I:Input O:Output 通过IO可以完成硬盘文件的读和写。...

  • JavaSE进阶-06-IO流

    1.什么是IO流? 答:文件的输入和输出  将文件放入内存的过程叫输入(Input)也称为读(Read),输入过程...

网友评论

      本文标题:javase part21 IO流

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