Java中的IO流(一)

本秂侑毒 提交于 2020-01-24 05:06:45

Java中的IO流(一):
https://blog.csdn.net/Veer_c/article/details/103833045
Java中的IO流(二):
https://blog.csdn.net/Veer_c/article/details/103833423
Java中的IO流(三):
https://blog.csdn.net/Veer_c/article/details/103833811

IO流分类:

IO:Java对数据的操作是通过流的方式,IO流用来处理设备之间的数据传输,上传文件和下载文件,Java用于操作流的对象都在IO包中。
根据流向可分为:输入流、输出流
根据数据类型可分为:
字节流:字节输入流、字节输出流
字符流:字符输入流、字符输出流
注意:一般我们在讨论IO的分类时,默认是按照数据类型分的。
字节流:
字节输入流 InputStream(抽象类)
字节输出流 OutputStream(抽象类)
字符流:
字符输入流 Reader
字符输出流 Writer
在这里插入图片描述
需求:请用字节流往一个文本文件中写一句话:”helloworld”。
分析:
首先要知道是字节流,写数据我们就应该知道是字节输出流,所以最终选择了OutputStream,而OutputStream是抽象类,所以我们应该找其子类,文件这个单词是File,所以就大胆的猜测下:FileOutputStream存在否。

如何往一个文件写数据,或者说就是字节输出流的操作步骤是什么呢?
A:创建字节输出流对象
B:调用写数据的方法
C:释放资源
flush()和close()的区别:
flush: 刷新缓冲区,流对象可以继续
close: 先刷新缓冲区,再关闭流对象。流对象不可以继续使用了。

public class OutputStreamDemo {
    public static void main(String[] args) throws IOException {
        /* 怎么使用文件输出流往文件中途写数据?
         * 1.创建文件输出流对象
         * 2.调用输出流对象的方法给文件中写数据
         * 3.释放资源*/
        //public FileOutputStream(String name)
        //public FileOutputStream(File file)
        //创建文件输出流对象
        FileOutputStream fos = new FileOutputStream("a.txt");
        //public FileOutputStream(File file)
        //File file = new File("a.txt");
        //FileOutputStream fos = new FileOutputStream(file);
        /* FileOutputStream fos = new FileOutputStream("a.txt");
         * 做了那些事情?
         * 1.创建fos对象指向文件a.txt
         * 2.创建一个文件a.txt */
        //调用输出流的写数据的方法给文件中写数据
        //public void write(byte[] b)
        byte[] byf = "helloworld".getBytes();
        fos.write(byf);
        //释放资源,关流操作
        fos.close();
        //关流之后,我们还能继续往文件中写数据吗?
        //不行的。。。
        //fos.write("java".getBytes());//java.io.IOException: Stream Closed
    }
}

两个构造的区别:
FileOutputStream(File file)
创建一个File对象,指向文件输出流;
FileOutputStream(String name)
创建一个具有文件名的输出流对象

FileOutputStream fos = new FileOutputStream(“fos.txt”);
请问上面这个操作做了哪几件事情?
1.创建了一个文件输出流fos,指向文件a.txt
2.创建了a.txt这个文件
fos.write(“helloworld”.getBytes());
fos.close();关流
fos.write(“java”.getBytes());

FileOutputStream 写数据的方法
write(byte[] b) :一次写入byte[]长度的字节
write(int b) :一次写一个字节
write(byte[] b, int off, int len) :一次写一个字节数组的一部分

字节输入流具体操作步骤:
字节输入流操作步骤:
A:创建字节输入流对象:
FileInputStream fis = new FileInputStream(“a.txt”);
B:调用方法读取数据
一次读取一个字节:read() – 读取不到内容的时候的返回值为 -1(并且用循环改进)
C:释放资源:fis.close

练习:
1.把a.txt的内容复制到b.txt中
2.从d:\中复制视频文件

数据源:
IODemo.java – 读取数据 – InputStream – FileInputStream – 一次读取一个字节
目的地:Copy.java – 写出数据 – OutputStream – FileOutputStream – 一次写一个字节。
1.把a.txt的内容复制到b.txt中

     如果要复制文件的话:前提要保证文件在该项目的根目录下;要么就直接写该文件的绝对路径。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyFile {
    public static void main(String[] args) throws IOException {
        //A:把a.txt的内容复制到b.txt中
        //封装数据源和目的地
        FileInputStream fis = new FileInputStream("OutputStreamDemo.java");
        FileOutputStream fos = new FileOutputStream("c.java");
        //2.读取数据源中的数据,将读取到的数据写入目的地中
        int by;
        while ((by=fis.read())!=-1) {
            //System.out.println(by);
            //将读取到的字节写入fos中
            fos.write(by);
        }
        //释放资源
        fos.close();
        fis.close();
    }
}

2.复制视频文件

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyMp4 {
    public static void main(String[] args) throws IOException {
        //1.疯转数据源和目的地
        FileInputStream fis = new FileInputStream("D://b.mp4");
        FileOutputStream fos = new FileOutputStream("d.mp4");
        //2.读取数据源,写如目的地
        int by;
        while ((by=fis.read())!=-1) {
            fos.write(by);
        }
        //3.释放资源
        fos.close();
        fis.close();
    }
}

字节输入流:具体操作步骤:
A:创建字节输入流对象
FileInputStream fis = new FileInputStream(“a.txt”);
B:调用方法读取数据(一次读取一个字节数组,提升效率),一次读取一个字节数组: public int read(byte[] b):返回实际读取长度,数据被读取到数组中。测试方法返回长度?根据String类的构造方法构造字符串
C:释放资源
fis.close(利用一次读写一个字节数组完成)
练习:
1.把a.txt的内容复制到b.txt中
2.把d:\复制视频文件

package cokm.edu_04;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyMp4 {
    public static void main(String[] args) throws IOException {
        //一次读写一个字节数组
        //1.封装数据源和目的地
        FileInputStream fis = new FileInputStream("D://b.mp4");
        FileOutputStream fos = new FileOutputStream("e.mp4");
        //一次读写一个字节数组
        byte[] bys =  new byte[1024];
        int len;
        while ((len=fis.read(bys))!=-1) {
            //读取多少就给fos中写多少数据
            fos.write(bys, 0, len);
        }
        //释放资源
        fos.close();
        fis.close();
    }
}

字节缓冲区流(也叫高效流):
BufferedInputStream(read() 一次读取一个字节,
public int read(byte[] b):返回实际读取长度,数据被读取到数组中。)
BufferedOutputStream(write(byte[] b))
低级流::基本的流,可以直接操作文件。
高级流:是操作基本流的流。

Java中的IO流(一):
https://blog.csdn.net/Veer_c/article/details/103833045
Java中的IO流(二):
https://blog.csdn.net/Veer_c/article/details/103833423
Java中的IO流(三):
https://blog.csdn.net/Veer_c/article/details/103833811

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!