InputStream和OutputStream流的使用

举报
多米诺的古牌 发表于 2022/07/30 14:34:19 2022/07/30
【摘要】 java.io.InputStream是字节输入流的抽象类,表示字节输入流的所有类的顶层父类。用来将文件中的数据读取到java程序中。如果需要使用输入流的时候,必须创建他的子类进行使用。在读取文件的时候我们常常使用InputStream抽象类的子类FileInputStream文件字节输入流来进行文件中的数据读取,将磁盘中的文件转化为流的形式,读取到内

1.InputStream简介

      java.io.InputStream是字节输入流的抽象类,表示字节输入流的所有类的顶层父类。用来将文件中的数据读取到java程序中。如果需要使用输入流的时候,必须创建他的子类进行使用。在读取文件的时候我们常常使用InputStream抽象类的子类FileInputStream文件字节输入流来进行文件中的数据读取,将磁盘中的文件转化为流的形式,读取到内存中来进行使用。

2.FileInputStream的使用        

FileInputStream的构造方法有:FileInputStream​(File file)参数是传递一个File类型的文件; FileInputStream​(String name)参数是传递一个String类型的文件路径。

常用的方法有:

int read​()是从文件中读取一个字节数的数据,并返回读取到的这个字节, 如果读取结束,则返回-1;

int read​(byte[] b)是一次读取一个字节数组,输入流会把读取到的内容放入到这个字节数组中,并返回读取到的个数, 如果读取结束,则返回-1;
void close​()是关闭流,如果不关闭流会造成内存溢出等情况,所以在使用结束后,需要手动调用关闭流的方法进行关闭。

3.FileInputStream读取文件

3.1 创建一个FileInputStream流对象,并指定需要读取的数据源文件,此时如果指定的数据源的文件不存在,则会抛出File not fount excep异常。

3.2 调用read()方法进行数据的读取。

3.3 把读取到的这个字节赋值给变量i,判断i是否不等于-1,如果不是-1表示没有读完,还在读,本次读取到了内容,就会继续再循环中对读取到的内容进行处理。

3.4 调用close​()方法关闭流进行资源的释放。

第一种,一个字节一个字节的读取,这种方法不能读取中文,因为一个中文占多个字节,此时一次读取一个字节会把中文拆开读。

public class Test {
    public static void main(String[] args) throws IOException {
        FileInputStream stream = new FileInputStream("F:\\demo123\\test\\test.txt");
        int i = 0;
        while ((i = stream.read()) != -1) {
            System.out.print((char) i);
        }
        stream.close();
    }
}

第二种,使用字节输入流一次读取一个字节数组,输入流会把读取到的内容放入到这个字节数组中,并返回读取到的个数, 如果读取结束返回-1,这种会比上一种读取方式效率高很多。

public class Test1 {
    public static void main(String[] args) throws IOException {
        FileInputStream stream = new FileInputStream("F:\\test123\\test\\test.txt");
        byte arr[]=new byte[1024];
        int len = 0;//返回读取到的个数
        //使用循环开始读取
        while((len=stream.read(arr))!=-1){
            System.out.println(new String(arr,0,len));
        }
        stream.close();
    }
}

4.FileOutputStream输出流进行文件复制

    FileOutputStream文件复制的流程是一边读,一边写,每读取一次就把读取到的内容写到文件中。和上面的一次读取一个字节数组的方式一样,也是采用这种方式进行复制的。

4.1 创建一个FileInputStream流对象,并指定需要读取的数据源文件,此时如果指定的数据源的文件不存在,则会抛出File not fount excep异常。

4.2 创建字节输出流对象用来写入,如果没有会进行自动创建。

4.3 创建一个数组用来读取

4.4 从文件中用字节数组读取数组,存储到字节数组中,每读取到一个内容,就把读取到的内容写入到目的地文件

public class Test2 {
    public static void main(String[] args) throws IOException {
        FileInputStream in= new FileInputStream("F:\\test123\\test\\test.txt");
        FileOutputStream out = new FileOutputStream("F:\\test123\\test\\test1.txt");
        byte arr[] = new byte[1024];
        int len = 0;
        while ((len = in.read(arr)) != -1) {    
            fs.write(arr,0,len);
        }
        in.close();
        out.close();
    }
}

以上就是InputStream和FileOutputStream的简单使用方法总结。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。