Java-IO(字节流)

2022/4/9 9:49:02

本文主要是介绍Java-IO(字节流),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1. 字节输出流

步骤:

  • 1.创建字节输出流对象
  • 2.调用 write() 方法写入数据
  • 3.释放资源

写入数据的三种方式

  • public void write(int b)
  • public void write(byte[] b)
  • public void write(byte[] b,int off,int len)

代码如下:

public class FileOutputStreamDemo2 {
    public static void main(String[] args) throws IOException {
        //创建字节输出流对象
        FileOutputStream fileOutputStream = new FileOutputStream("D:\\o.txt");

        //public void write(int b)  写入的是数字,输出的是数字对应的Assic码
//        fileOutputStream.write(99);
//        fileOutputStream.write(96);
//        fileOutputStream.write(35);
//        fileOutputStream.write(56);

        // public void write(byte[] b)  写入数组
        byte[] bytes = {33,56,87,57,22,57,14,89,22};
//        fileOutputStream.write(bytes);

        //public void write(byte[] b,int off,int len)
        fileOutputStream.write(bytes, 2, 3);

        fileOutputStream.close();
    }
}

注意事项:

换行问题

  • 1、没有换行,如何实现换行呢?
    为什么上一个代码中没有进行换行呢?
    因为我们在写数据的时候,只写了字节,没有写入换行符
    如何实现呢?
    理论上,我们每写完一部分的时候,就写一个换行符进行换行
    注意,每一个系统对应的换行不大一样
    Windows:\r\n
    Mac: \r
    Linux: \n

追加问题

  • 2、每次运行写入的时候,会把上一次运行的数据进行覆盖,如何实现追加写入呢?
    追加:在原有的文件内容上继续添加一些新的内容
    覆盖:将原有的文件内容删掉,再添加一些新的内容
FileOutputStream(String name, boolean append) 创建文件输出流以指定的名称写入文件。
public class FileOutputStreamDemo3 {
    public static void main(String[] args) throws IOException {
        //创建字节输出流对象
        //如果不添加后面的 append 参数的话。 默认的是 FALSE ,不追加写入
        FileOutputStream fileOutputStream = new FileOutputStream("D:\\p.txt",true);

        //调用 write 方法写入数据
        for (int i = 0; i < 5; i++) {
            fileOutputStream.write(("大数据,yyds"+i).getBytes());
            fileOutputStream.write("sdfasdf".getBytes());
            //添加换行操作
            fileOutputStream.write("\r\n".getBytes());
        }
        fileOutputStream.close();
    }
}

2. 字节输入流

步骤

字节输入流:ImputStream
子类:FileInputStream

  • 1、创建字节输入流对象
  • 2、调用方法读取数据
  • 3、释放资源

FileInputStream的构造方法:

  • FileInputStream(File file)
  • FileInputStream(String name)

字节输入流读取对象读取数据的两种方式:

  • public int read()
  • public int read(byte[] b)

上代码

public class FileInputStreamDemo1 {
    public static void main(String[] args) throws IOException {
        //创建字节输入流对象
//        File file = new File("D:\\a.txt");
//        FileInputStream fileInputStream = new FileInputStream(file);
        FileInputStream fileInputStream = new FileInputStream("D:\\a.txt");

        // public int read()读取
//        System.out.println((char)fileInputStream.read());
//        System.out.println((char)fileInputStream.read());
//        System.out.println((char)fileInputStream.read());
//        System.out.println((char)fileInputStream.read());
/*
        //我们发现,当文件的内容过多的时候,一个字节一个字节去读取,发现很麻烦,而且语句都是一样
        //使用循环改进,使用哪一种循环呢?
        //因为我们不知道要循环多少次才能读到文件的末尾,所以采用while循环
        //使用while循环,就得有一个循环条件
        //想一下,这个循环条件是不是就是读到了末尾就不读
        //如何使用代码表示读到文件末尾呢?如果达到文件的末尾, -1 。
        //一次读取一个字节
 */
        int len = 0;
        while ((len = fileInputStream.read()) != -1){
            System.out.println((char)len);
        }
        fileInputStream.close();
    }
}

字节输入流读取数据的第二种方法,一次读取一个数组

public class FileInputStreamDemo2 {
    public static void main(String[] args) throws IOException {
        //创建字节输入对象
        FileInputStream fileInputStream = new FileInputStream("D:\\b.txt");
        //创建字节数组,依据大小来读取
        byte[] bytes = new byte[4];
        int len = 0;
        while ((len = fileInputStream.read(bytes)) != -1){
            System.out.println(new String(bytes, 0, len));
        }
    }
}


这篇关于Java-IO(字节流)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程