2021-05-14

IO流基础知识

IO流基础知识
流的原理:
在Java程序中、对于数据的输入、输出操作以(Stream)方式进行
JDK提供了各种各样的“流”类,用于获取不同种类的数据;程序中通过标准的方法输入或输出数据。
Java的流类型一般位于Java.io包中。

流的概念
数据源
date source。提供原始数据的原始媒介。常见的:数据库、文件、其他程序、内存、网络连接、IO设备。
数据源就像一个水箱,流就像水箱中流着的水,程序就是我们最终用户。流是一个抽象、动态的概念,是一串连续动态的数据集合。
流的分类
输入流,数据源到程序(InputStream、Reader读进去)
输出流、程序到目的地(OutputStream、Wirte写进去)
处理数据单元:
字节流:按照字节读取数据(InputStream、OutputStream)
字符流:按照字符串读取数据(Reader、Wirte)
功能不同
节点流,可以直接从数据源或目的地读写数据。
处理流(包装流),不直接连接到连接到数据源或目的地,是其他封装,主要目的是简
化操作性和提高性能
节点流和处理流的关系:
节点流出于IO操作的第一线,所有操作必须他们进行
处理流可以对其他流进行处理(提高效率或操作灵活性)
文件流。
读取(输入)文件示例:
package io;
/*

  • FileInputStream

  • 方向:输入流

  • 单元:字节流

  • 功能:节点流

  • 讲D:/IO.txt中的内容打印在控制台上
    */
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    public class iotest {
    public static void main(String[] args) throws IOException {
    //File file = new File(“D:/IO.txt”);
    InputStream input = new FileInputStream(new File(“D:/IO.txt”));
    //如何读取文件中数据
    //准备一个字节数组,作为中转站
    byte[] b = new byte[1024];
    //去读取一个字节
    int len;
    len = input.read();

    while(len!=-1){
        
        String str = new String(b,0,len);
        //byte[]----->String
        System.out.println(str);
        len = input.read(b);
    }
    input.close();
    //关闭文件流
    

    }
    }
    写入(输出)文件示例
    package io;

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

/*

  • FileOutputStream

  • 方向:输出流

  • 单元:字节流

  • 功能:节点流

  • 讲字符串打印到文件上
    */
    public class testoutput {

    public static void main(String[] args) throws IOException {
    //新建输出文件流
    OutputStream output = new FileOutputStream(new File(“D:/deom.txt”));

    String str = "hello output"; 
    //String---->byte[]
    
    byte [] b = str.getBytes();
    //讲字符串转换为字节数组
    output.write(b);
    //将字符数组写入文件中
    System.out.println("ok");
    output.close();
    

    }

}

文件的复制
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/*

  • 目标:将D:/test.txt复制到D:/test1.txt
  • 1.文件输入流:FileIutputStream,将D:/test.txt中的内容读入内存中
  • 2.文件输出流:FileOutputStream,将内存中的信息写入D:/test1.txt中
    */
    public class teachercopy {
    public static void main(String[] args) throws IOException {
    //文件输入流
    InputStream input = new FileInputStream(“D:/test.txt”);
    //文件输出流
    OutputStream output = new FileOutputStream(“D:/test1.txt”);
    //创建缓冲区,字节数组
    byte[] b = new byte[1024];
    int len;
    while((len=input.read(b))!=-1) {
    //将信息写入目的地
    output.write(b,0, len);
    }
    System.out.println(“ok”);
    //关闭资源,先开后关闭,后开后关闭
    output.close();
    input.close();
    }
    }

文件流的扩展
往文件里面追加东西的方法:
FileOutputStream(String name , boolean append)
当boolean为true时,则将字节写入文件末尾处,而不是开头。

刷新缓冲区和关闭资源:
flush();刷新并保存操作。调用该方法指示将字节立即写入它们预期目标。
close();关闭资源,调用close();方法时,它会自动调用flush()方法,把全部字节写入文件。

利用字节流来复制:
/**
字节流:可以操控任何文件
FileInputStream
FileOutputStream
字符流:只能操作字符类型的文件,如txt、java、html、xml。。。。。
不能操作除字符以外的文件如word文档,word文档底层不是以字符来存储的,而是用字节来存储的。
FileReader
FileWriter
*/
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
public class copy3 {

public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub
    Reader reader = new FileReader("D:/test.txt");
    Writer writer = new FileWriter("D:/test2.txt");
    int c;
    while((c=reader.read())!=-1) {
        System.out.print((char)c);
        writer.write(c);
        writer.flush(); 
    }
    writer.close();
    reader.close();
}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值