图文详解Java中的字节输入与输出流

作者:深浅Java 时间:2022-12-23 23:14:48 

目录
  • 字节输入流

    • 字节输入流结构图

    • FileInputStream类

    • 构造方法:

    • 常用读取方法:

  • 字节输出流

    • 字节输出流结构图:

    • FileOutputStream类

    • 构造方法:

    • 常用写入方法:

  • 总结

    字节输入流

    java.io.InputStream抽象类是所有字节输入流的超类,将数据从文件中读取出来。

    字节输入流结构图

    图文详解Java中的字节输入与输出流

    在Java中针对文件的读写操作有一些流,其中介绍最常见的字节输入流。

    FileInputStream类

    FileInputStream流被称为字节输入流,对文件以字节的形式读取操作,例如文字,图片等。

    构造方法:

    • FileInputStream(File file) ;通过File文件对象创建

    • FileInputStream(String name) ;通过一个文件路径字符串创建

    常用读取方法:

    read() 方法,从文件的第一个字节开始读取,每执行一次就读取一个字节,如果文件为空,则读取返回-1,挨个字节读取对于中文字符会出现乱码。


    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;

    public class dome2{
    public static void main(String[] args){
     File file=new File("D:/.../...txt");   //创建file对象
     FileInputStream fi=null;
    try {
    fi=new FileInputStream(file);   //创建字节输入流

    int read;  

    while((read=fi.read())!=-1) {   //数据不为空的情况下循环读取
    System.out.print((char)read);   //将读取的数据打印
    }
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }finally {
    if(fi!=null) {
    try {
    fi.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }

    }
    }

    read(byte[] b) ,从此输入流中读取b.length个字节的数据读入到byte数组中,针对中文字符读取产生乱码,需要编码,如果记事本存储的汉字是什么格式的就在读取的时候改成什么格式,例如我现在记事本的编码格式是ANSI,在读取的时候就是按照ANSI或者gbk编码格式读取。


    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;

    public class dome2{
    public static void main(String[] args){
     File file=new File("D:/../...txt");   //创建file对象
     FileInputStream fi=null;
    try {
    fi=new FileInputStream(file);   //创建字节输入流

    int read;  
    byte[] bytes=new byte[1024];  //创建一个数组,讲读取的字节存入数组
    while((read=fi.read(bytes))!=-1) {   //数据不为空的情况下循环读取
    System.out.print(new String(bytes,0,read,"gbk"));   //将读取的数据按字符串打印
    }
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }finally {
    if(fi!=null) {
    try {
    fi.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }

    }
    }
    方法名说明
    void close()关闭此文件输入流并释放关于此流有关的所有系统资源
    int read(byte[] b, int off, int len)从此输入流中将len个字节的数据读入到byte数组中
    int available()返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数。
    long skip(long n)从输入流中跳过并丢弃 n 个字节的数据。

    字节输出流

    java.io.OutputStream抽象类是所有字节输出流的超类,该类用于对文件写入数据。

    字节输出流结构图:

    图文详解Java中的字节输入与输出流

    FileOutputStream类

    FileOutputStream类是向文件中以字节的形式写入数据,例如图像和图片等。

    构造方法:

    1. FileOutputStream(File file);通过一个file对象表示的文件创建一个字节输出流。

    2. FileOutputStream(File file, boolean append);通过一个file对象表示的文件创建一个字节输出流,append表示追加,true代表往后追加,false则要全部覆盖,文件里只存留刚写入的数据。

    3. FileOutputStream(String name);通过一个指定路径名字符串创建一个字节输出流对象。

    4. FileOutputStream(String name, boolean append);通过一个指定路径字符串创建一个字节输出流对象,append同上。

    常用写入方法:

    1. write(byte[] b); 将b.length个字节从指定的byte数组中写入到此输出流中。

    2. write(byte[] b, int off, int len); 将指定的byte数组从偏移量off开始到len个字节写入到此输出流中。

    3. write(int b); 将指定字节写入到此输出流中。


    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;

    public class dome2{
    public static void main(String[] args){
     File file=new File("D:/hello.txt");   //创建file对象
     FileOutputStream fo=null;

    try {
    fo=new FileOutputStream(file);
    String str="你好,java!";
    byte[] bytes=str.getBytes();
    fo.write(bytes);
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }finally {
    if(fo!=null) {
    try {
    fo.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }

    }
    }

    来源:https://blog.csdn.net/m0_46813809/article/details/119895747

    标签:java,字节输入,输出流
    0
    投稿

    猜你喜欢

  • Java实现五子棋网络版

    2022-05-06 04:11:29
  • JDK集合源码之解析TreeMap(一)

    2021-08-09 07:14:02
  • Java中的private、protected、public和default的区别(详解)

    2023-01-10 01:55:51
  • Java查找不重复无序数组中是否存在两个数字的和为某个值

    2023-08-22 16:44:40
  • IDEA实现JDBC的操作步骤

    2021-08-29 11:08:55
  • java与JSON数据的转换实例详解

    2022-07-03 22:48:25
  • 浅谈JVM垃圾回收有哪些常用算法

    2022-02-28 16:51:56
  • 史上最简洁C# 生成条形码图片思路及示例分享

    2023-08-24 15:50:25
  • Android RecyclerView 上拉加载更多及下拉刷新功能的实现方法

    2021-10-06 22:37:24
  • Java中去除字符串中所有空格的几种方法

    2023-11-24 04:59:24
  • C# 开发(创蓝253)手机短信验证码接口的实例

    2023-05-22 11:15:54
  • Android网络开发中GET与POST请求详解

    2022-05-28 23:23:53
  • 解决FeignClient重试机制造成的接口幂等性

    2022-01-25 11:10:35
  • Spring4如何自定义@Value功能详解

    2021-12-16 06:31:12
  • MyBatis-Plus解决逻辑删除与唯一索引的问题

    2022-09-09 00:17:03
  • Java数组的定义、初始化、及二维数组用法分析

    2022-06-11 16:59:04
  • Android 文件数据存储实例详解

    2023-07-28 17:08:03
  • Flutter自定义底部导航栏的方法

    2022-01-10 15:48:33
  • java实现MapReduce对文件进行切分的示例代码

    2023-10-07 21:46:59
  • Maven添加Tomcat插件实现热部署代码实例

    2021-12-09 02:03:49
  • asp之家 软件编程 m.aspxhome.com