2021-06-22

这篇博客介绍了Java中的IO流,包括输入流和输出流的分类,以及字节流和字符流的区别。作者通过实例展示了如何使用FileOutputStream进行文件写入,并探讨了字节流的换行和追加写入问题。示例代码详细解释了字节流的write方法,以及如何实现文件的追加写操作,确保数据不会被覆盖。
摘要由CSDN通过智能技术生成

IO:

package IODemo;

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

/*
    IO流概述和分类:
    IO流概述:
     *IO 输入、输出
     * 流:是一种抽象概念,是对数据传输的总称。也就是说数据在设备间的传输称为流,流的本质是数据传输
     * IO流就是用来处理设备间数据传输问题的
        常见的应用: 文件复制、文件上传、文件下载
     分类:
     * 按照数据的流向
         输入流:读数据
         输出流:写数据
     * 按照数据类型来分
         字节流:字节输入流 字节输出流(读不懂的)
         字符流:字符输入流 字符输入流(读得懂的)
     一般来说,我们说IO流的分类是按照数据类型来分的
     如果数据通过Window自带的记事本软件打开,我们还可以读懂里面的内容,就使用字符流
     否则就使用字节流,如果不知道使用哪一种流,则使用字节流
     字节流是万能流
 */
/*
    输入输出流都是抽象类 必须要有它的子类去实现
 */
/*
   字节流写数据:
   字节流抽象基类:
   *InputStream:这个抽象类是表示字节输入流的所有类的超类
   *OutputStream:这个抽象类是表示字节流输出流的所有类的超类
   * 子类名特点:子类名称都是以其父类名作为子类名的后缀
       &&&&&&
         FileOutputStream 文件输出流用于将数据写入File
         FileOutputStream(String name):创建文件输出流以指定的名称写入文件
     使用字节输出流写数据的步骤:
     * 创建字节输出流对象
     * 用 write 写入数据
     * 用close 释放资源
 */
public class IODemo1 {
    public static void main(String[] args) throws IOException {
//        创建字节输出流对象
//        FileOutputStream(String name):创建文件输出流以指定的名称写入文件
        FileOutputStream fileOutputStream =new FileOutputStream("文件\\src\\io.txt ");

        /*
            FileOutputStream fileOutputStream =new FileOutputStream("文件\\src\\io.txt ");就是系统会自动封装成文件
            相当于
            FileOutputStream fileOutputStream =new FileOutputStream(new File("文件\\src\\io.txt "));      new File(name)

            File file =new File("文件\src\io.txt ");
            FileOutputStream f =new  FileOutputStream(file);
            这两个代码就相当于
            FileOutputStream f =new  FileOutputStream(new File("文件\src\io.txt "));
            也就是跟上面的FileOutputStream fileOutputStream =new FileOutputStream("文件\\src\\io.txt ");是相同的意思

           也就是 这些方法都可以用在同一件事情上 创建字节输出流对象
         */

/*
     这个代码做了三件事情:
     *先创建文件
     * 创建了字节输出流
     * 让字节输出流对象指向创建好的文件
 */
//  void write(int b):将指定的字节写入此文件输出流
//        fileOutputStream.write(99);
//        byte[] bytes ={97,98,99,100,101,102,103,104};
//        fileOutputStream.write(bytes);
//        fileOutputStream.write(bytes,2,3);
//        这些数据都是 转化为字符
//        byte[] bytes ={'a','b','c','d','c'};
//        fileOutputStream.write(bytes);
//        直接转化为字符数组
        byte[] bytes ="abcdcsd".getBytes();
        fileOutputStream.write(bytes);



        /*
           字节流写数据:
           **void write(int b):将指定的字节写入此文件输出流(一次写一个字节)
           * void write(byte[] b):将b.length字节从将指定的字节数组写入此文件输出流(一次写一个字符数组)
           * void write(byte[] b,int off,int len):将len字节从将指定的字节数组开始,从偏移量off开始写入此文件输出流(一次写一个字符数组的部分数组)
                                                 偏移量就是索引的位置,从这个索引off开始到我们所要的长度len结束
         */
         /*
           构造方法:
                 * FileOutputStream(String name):创建文件输出流以指定的名称写入文件
                 * FileOutputStream(File file):创建文件输出流以写入由指定的File对象表示的文件
          */
//        任何一个流的最后要释放资源
//        void close():关闭此文件输出流并释放与此流相关联的任何系统资源
        fileOutputStream.close();


    }
}
package IODemo;

/*
   字节流写数据的两个问题:
    * 字节流实现换行:
       window:\r\n
       linux:\r
       mac:\n
       但是这次我运行 用的是\n  就可以实在在文件夹里面用window自带的记事本打开实现换行 不仅仅只是在idea中
    * 字节流写数据实现追加
      public FileOutputStream(String name,boolean append)
        创建文件输出流以指定的名称写入文件
        如果第二个参数为true 则字节将写入文件的末尾而不是开头
 */
import java.io.FileOutputStream;
import java.io.IOException;

public class IODemo2 {
    public static void main(String[] args) throws IOException {
//实现追加数据,而不是每次运行前面的数据被删除 放入新的数据 要实现 存入写数据但是依旧保留了之前的数据
//        FileOutputStream fileOutputStream =new FileOutputStream("文件\\src\\io.txt");
        FileOutputStream fileOutputStream =new FileOutputStream("文件\\src\\io.txt",true);
//这样每运行一次 都会在原有的基础上添加10个文本

//        写数据
        for (int i=0;i<10;i++){
            fileOutputStream.write("nihao".getBytes());
//            文件:nihaonihaonihaonihaonihaonihaonihaonihaonihaonihao
//            换行
            fileOutputStream.write("\n".getBytes());//完成换行
        }

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangmuzi557

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值