文件字节输入输出流

本文介绍了Java中的IO流,作为内存与存储设备间数据传输的通道,包括字节流、字符流、节点流和过滤流的概念。重点讲解了InputStream和OutputStream作为字节流的超类,以及如何使用它们将文件内容复制到新的文件中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IO流:内存与存储设备之间传输数据的通道

  • 数据借助流传输
  1. 输入流:将<存储设备>中的内容读入到内存中
  2. 输出流:将<内存>中的内容写入到<存储设备>中
  3. 文件 -> Input -> 程序 -> Output -> 文件

  1. 字节流:读写所有数据

  2. 字符流:读写文本数据


  3. 节点流:实际读写传输数据;

  4. 过滤流:节点流之上增强功能


InputStream和OutputStream是所有字节流的超类

  • 一般由子类实现
  • 一次只能操作一个字节

package com.li.changGe.ioStream.byteStream;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class FileInputOutputStreamDemo01 {

  private static String fileName = "C:\\Users\\林木\\Desktop/test.txt";

  public static void main(String[] args){
    try {
      //fileInputStreamTest();

      fileOutputStreamTest();

    }catch (Exception e){
      e.printStackTrace();
    }

  }

  public static void fileInputStreamTest() throws Exception{

    /**
     * 文件字节流
     *
     * 如果不写盘符,默认从当前项目下找
     */
    InputStream fileInputStream = new FileInputStream(fileName);

    byte[] bytes = new byte[10];

    int count;
  //----------------------------------------------------
    /**
     * read()返回读到的字节数,
     * 读完时会返回-1
     *
     * 单字节读取
     */
    /*while ((count = fileInputStream.read()) != -1){
      //O ever youthful,O ever weeping.
      System.out.print((char)count);
    }*/

    /**
     * 读取自定义的缓冲区中(数组)
     */
    while ((count = fileInputStream.read(bytes)) != -1){
      /**
       * 基本类型没有重写toString()
       * [B@14ae5a5
       * [B@14ae5a5
       * [B@14ae5a5
       * [B@14ae5a5
       */
      //System.out.println(bytes.toString());

      //O ever youthful,O ever weeping.
      System.out.println(new String(bytes,0,count));

      /**
       * 如果最后一次读取时,剩余的字符不够数组长度了
       * 数组就会残留上一次的数据
       * O ever youthful,O ever weeping.r weeping
       */
      //System.out.print(new String(bytes,0,bytes.length));
    }

    fileInputStream.close();

  }//fileInputStreamTest()
//------------------------------------------------------

  public static void fileOutputStreamTest() throws Exception{
    /**
     * true=开启追加:将新数据追加到原文件中数据的后面
     * 默认不写是覆盖原文件数据
     */
    OutputStream fileOutputStream = new FileOutputStream(fileName,true);

    String message = "Hello world!";

    fileOutputStream.write(message.getBytes());
    System.out.println("追加完毕");

    fileOutputStream.close();
  }//fileOutputStreamTest()

}

将文件复制到新文件中

package com.li.changGe.ioStream.byteStream;

import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 * 将文件复制到新文件中
 */
public class FileInputOutputStreamFileCopyDemo01 {
    private static String fileName = "C:\\Users\\林木\\Desktop/UID.jpg";
    private static String fileName1 = "C:\\Users\\林木\\Desktop/UID1.jpg";

    public static void main(String[] args) throws Exception{
        FileInputStream fileInputStream = new FileInputStream(fileName);
        //没有文件时会自动创建文件
        FileOutputStream fileOutputStream = new FileOutputStream(fileName1);

        byte[] bytes = new byte[10];
        int count;
        
		//-------------------------------------------------------
        
        while ((count = fileInputStream.read(bytes)) != -1){
            fileOutputStream.write(bytes,0,count);
        }

        System.out.println("写入完毕");
        
		//-------------------------------------------------------
        
        //由近到外的关闭
        fileOutputStream.close();
        fileInputStream.close();

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

helloses

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

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

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

打赏作者

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

抵扣说明:

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

余额充值