Java I/O流(基础)

在汉语本义中,流一般认为指水的移动,引申泛指液体移动。而在计算机中,流是建立在面向对象基础上的一种抽象的处理数据的工具。

计算机中的流是一种有序流。我们可以将计算机想象成一个蓄水的湖,将的水先储蓄湖中(Input),某一天,人们想用这个湖中的水了,就调出来(Output),这个运行整体输入/输出流(I/O Streams)。在这里就可以通过湖实现水交换和传输。这个水就是流。

我们应当在Java通过怎样的一种方式去让 在我们的电脑中输入/输出?

字节(字符)输入流(I):以内存为基准,来自磁盘文件/网络中的数据以字节(字符)的形式读入到内存中去的流称为字节(字符)输入流。

字节(字符)输出流(O):以内存为基准,把内存中的数据以字节(字符)写出到磁盘文件或者网络中去的流称为字节(字符)输出流。

Java为我们提供了几种API方便我们进行对字节(字符)流的输出与调用:

字节输入流

1、使用文件字节输入流读取字节数据。

public class FileInputStreamDome1 {

    public static void main(String[] args) throws IOException {
        InputStream is = new FileInputStream("file-app\src\data.txt") //创建字节输入流管道与源文件对象接通
        
       //a.使用文件字节输入流每次读取一个字节的数据。
       int len = is.read() ;//每次读取一个字节返回,如果字节已经没有可读的返回-1
      System.out.println((char)len);
      
      //b.使用文件字节输入流每次读取一个字节数组的数据。
      byte[] buffer = new byte[3];//定义一个字节数组,读取字节数组
        int len1 = is.read(buffer ) ;

        String rs = new String(buffer,0,len1) ;//倒出多少读取多少
        System.out.println(rs);
        
        //c.使用文件字节输入流一次读完全部字节数据。
        byte[] buffer1 = is.readAllBytes() ;
        System.out.println(new String(buffer1));
    }
  }`
复制代码

字节输出流

1、使用文件字节输出流输出字节数据。

public class FileOutputStreamDome1 {
    public static void main(String[] args) throws IOException {
        //1、创建一个文件字节输出流管道与目标文件接通
        //OutputStream os = new FileOutputStream("file-app//src//data1.txt");//先清空文件之前的数据,在进入
        OutputStream os = new FileOutputStream("file-app//src//data1.txt",true);//不会清空
        //2、写数据进入
        //a.写一个字节
        os.write('a') ;
        os.write("\r\n".getBytes() ) ;//换行

        //b.写一个字节数组
        byte[] buffer = {'a',87,65,'z','x','n'};
        os.write(buffer);//中文可能出现乱码
        os.write("\r\n".getBytes() );
        byte[] buffer2 = "你好,同志!".getBytes() ;//不会乱码
        os.write(buffer2) ;
        os.write("\r\n".getBytes() );

        //c.写一个字节数组的一部分
        os.write(buffer,1,4) ;
        os.write("\r\n".getBytes() );

        //os.flush() ;//刷新数据,进行后可以继续使用流
        os.close() ;//释放数据,包含 flush的功能,进行后流不可使用
    }
}
复制代码

字符输入流

1、使用文件字节输入流读取字符数据。

ublic class FileReaderDome1 {
    public static void main(String[] args) throws IOException {
        //1、创建一个字符输入流管道与源文件接通
        Reader fr = new FileReader("file-app//src//data.txt") ;

        //2、读取一个字符返回,没有可读的字符了返回-1
        int code = fr.read() ;
        System.out.print((char)code);
        
        //3、用循环,读取一个字符数组的数据。
        char[] buffer = new char[1024];
        int len;
        while((len = fr.read(buffer) )!= -1){
            String rs = new String (buffer,0 ,len);
            System.out.println(rs);
    }
}
复制代码

字符输出流

1、使用文件字节输出流输出字符数据。

public class FileWriteDome2 {
    public static void main(String[] args) throws IOException {
        //1、创建一个文件字节输出流管道与目标文件接通
        //Writer fw = new FileWriter("file-app//src//data2.txt");//先清空文件之前的数据,在进入
        Writer fw = new FileWriter("file-app//src//data2.txt",true) ;//不会清空

        //2、写数据进入
        //a、写一个字符
        fw.write('z') ;
        fw.write("\r\n" ) ;//换行

        //b、写一个字符串
        fw.write("你好,同志") ;
        fw.write("\r\n" ) ;//换行

        //c、写一个字符数组
        char[] chars = "你好,同志".toCharArray() ;
        fw.write(chars) ;
        fw.write("\r\n" ) ;//换行

        //d、写字符串的一部分
        fw.write("你好,同志",0,2);
        fw.write("\r\n" ) ;//换行

        //e、写字符数组的一部分
        fw.write(chars,0,2);
        fw.write("\r\n" ) ;//换行
        
        //fw.flush() ;
        fw.close() ;//释放数据
    }
}
复制代码

字节流不适合读取中文内容输出;

字符流适合做文本文件的操作(读,写)

呼,结束~~


作者:time_silence
链接:https://juejin.cn/post/7148773909599862815
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值