zoukankan      html  css  js  c++  java
  • Java IO详解(三)------字节流 FileInputStream、FileOutputStream

    1.OutputStream字节输出流

    package stream;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    
    /***
     * @ClassName: FileOutputStreamDemo
     * @Description: TODO
     * @Auther: chujiu
     * @Date: 2020/6/8
     * @version : V1.0
     */
    public class FileOutputStreamDemo {
        public static void main(String[] args) throws IOException {
    
            //1、创建目标对象,输出流表示把数据保存到哪个文件。不写盘符,默认该文件是在该项目的根目录下
            File target = new File("G:" + File.separator + "javabased" + File.separator + "JavaTest" + File.separator + "java.txt");
    
            //2、创建文件的字节输出流对象,第二个参数是 Boolean 类型,true 表示后面写入的文件追加到数据后面,false 表示覆盖
            OutputStream out = new FileOutputStream(target, true);
    
            //3、具体的 IO 操作(将数据写入到文件 java.txt 中)
            /**
             * void write(int b):把一个字节写入到文件中
             * void write(byte[] b):把数组b 中的所有字节写入到文件中
             * void write(byte[] b,int off,int len):把数组b 中的从 off 索引开始的 len 个字节写入到文件中
             */
            out.write(65); //将 A 写入到文件中
            out.write("Aa".getBytes()); //将 Aa 写入到文件中
            out.write("ABCDEFG".getBytes(), 1, 5); //将 BCDEF 写入到文件中
            //经过上面的操作,java.txt 文件中数据为 AAaBCDEF
    
            //4、关闭流资源
            out.close();
    
            System.out.println(target.getAbsolutePath());
    
        }
    }

    2.InputStream字节输入流

    package stream;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Arrays;
    
    /***
     * @ClassName: FileInputStreamDemo
     * @Description: TODO
     * @Auther: chujiu
     * @Date: 2020/6/8
     * @version : V1.0
     */
    public class FileInputStreamDemo {
        public static void main(String[] args) throws IOException {
    
            //1、创建目标对象,输入流表示那个文件的数据保存到程序中。不写盘符,默认该文件是在该项目的根目录下
            //java.txt 保存的文件内容为:AAaBCDEF
            File target = new File("G:" + File.separator + "javabased" + File.separator + "JavaTest" + File.separator + "java.txt");
    
            //2、创建输入流对象
            InputStream in = new FileInputStream(target);
    
            //3、具体的 IO 操作(读取 java.txt 文件中的数据到程序中)
            /**
             * 注意:读取文件中的数据,读到最后没有数据时,返回-1
             *  int read():读取一个字节,返回读取的字节
             *  int read(byte[] b):读取多个字节,并保存到数组 b 中,从数组 b 的索引为 0 的位置开始存储,返回读取了几个字节
             *  int read(byte[] b,int off,int len):读取多个字节,并存储到数组 b 中,从数组b 的索引为 0 的位置开始,长度为len个字节
             */
            //int read():读取一个字节,返回读取的字节
            int data1 = in.read();//获取 java.txt 文件中的数据的第一个字节
    
            System.out.println((char) data1); //A
    
            //int read(byte[] b):读取多个字节保存到数组b 中
            byte[] buffer = new byte[10];
    
            in.read(buffer);//获取 java.txt 文件中的前10 个字节,并存储到 buffer 数组中
    
            System.out.println(Arrays.toString(buffer)); //[65, 97, 66, 67, 68, 69, 70, 0, 0, 0]
            System.out.println(new String(buffer)); //AaBCDEF[][][]
    
            //int read(byte[] b,int off,int len):读取多个字节,并存储到数组 b 中,从索引 off 开始到 len
            in.read(buffer, 0, 3);
    
            System.out.println(Arrays.toString(buffer)); //[65, 97, 66, 0, 0, 0, 0, 0, 0, 0]
            System.out.println(new String(buffer)); //AaB[][][][][][][]
    
            //4、关闭流资源
            in.close();
        }
    }

    3.用字节流完成文件的复制(去拷贝)

    package stream;
    
    import java.io.*;
    
    /***
     * @ClassName: FileCopy
     * @Description: TODO 将 a.txt 文件 复制到 b.txt 中
     * @Auther: chujiu
     * @Date: 2020/6/8 6:30
     * @version : V1.0
     */
    public class FileCopy {
        public static void main(String[] args) throws IOException {
    
            //1、创建源和目标
            File srcFile = new File("G:" + File.separator + "javabased" + File.separator + "JavaTest" + File.separator + "a.txt");
            File descFile = new File("G:" + File.separator + "javabased" + File.separator + "JavaTest" + File.separator + "b.txt");
    
            //2、创建输入输出流对象
            InputStream in = new FileInputStream(srcFile);
            OutputStream out = new FileOutputStream(descFile);
    
            //3、读取和写入操作
            byte[] buffer = new byte[10];//创建一个容量为 10 的字节数组,存储已经读取的数据
    
            int len = -1;//表示已经读取了多少个字节,如果是 -1,表示已经读取到文件的末尾
    
            while ((len = in.read(buffer)) != -1) {
                //打印读取的数据
                System.out.println(new String(buffer, 0, len));
                //将 buffer 数组中从 0 开始,长度为 len 的数据读取到 b.txt 文件中
                out.write(buffer, 0, len);
            }
    
            //4、关闭流资源
            out.close();
            in.close();
        }
    }

    参考文章:https://www.cnblogs.com/ysocean/tag/Java%20IO%E8%AF%A6%E8%A7%A3%E7%B3%BB%E5%88%97/

    一辈子很短,努力的做好两件事就好;第一件事是热爱生活,好好的去爱身边的人;第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。
  • 相关阅读:
    字符编码相关
    函数之形参与实参
    文件操作模式
    函数对象,名称空间,作用域,和闭包
    吴裕雄天生自然SPRINGBOOT开发实战处理'spring.datasource.url' is not specified and no embedded datasource could be autoconfigured
    吴裕雄天生自然SPRINGBOOT开发实战处理XXXX that could not be found.
    吴裕雄天生自然SPRINGBOOT开发实战SpringBoot HTML表单登录
    吴裕雄天生自然SPRINGBOOT开发实战SpringBoot REST示例
    吴裕雄天生自然SpringBoot开发实战学习笔记处理 Could not write metadata for '/Servers'.metadata\.plugins\org.eclipse.core.resources\.projects\Servers\.markers.snap (系统找不到指定的路径。)
    吴裕雄天生自然SPRINGBOOT开发实战SpringBoot Tomcat部署
  • 原文地址:https://www.cnblogs.com/antao/p/13063457.html
Copyright © 2011-2022 走看看