【Java】IO流的混乱关系,看得我直呼绝绝子

1.一次读一个字节

2.一次读一个数组

四、字符缓冲流

字符缓冲流写文件

字符缓冲流读数据


一、前言

========

这些奇奇怪怪的流在理解起来也是其奇怪怪的,用起来却真香┗|`O′|┛ 嗷~~

二、IO流概述

=======

I表示input、O表示output表示输入输出流。

流是一种抽象的概念,是对数据传输的总称,也就是数据在设备间传输称为流,流的本质

是数据传输,流的本质是数据传输。

我们都知道,程序运行会加载到内存上。

  • IO流就是用来处理设备间数据传输的问题的

IO流的分类大致可以分为两种:

①按数据流向

  • 输入流:读数据

  • 输出流:写数据

②按数据类型分

  • 字节输入流;字节输出流

  • 字符输入流;字符输出流

一般来说IO流是按照数据类型分的

文本文件一般用字符流,其他用字节流

字节流是万能流,可以用于任意类型的文件。

三、字节流写数据

========

①InputStream:

  • 这个抽象类是表示输入字节流的所有类的超类。

②OutputStream:

  • 这个抽象类是表示字节输出流的所有类的超类。

他们的子类都是以其父类作为子类名的后缀:

因为他是一个抽象类,所以我们写、读数据一般都用他们的直接子类。

FileOutputStream和FileInputStream,前者用于写数据,后者用于读数据。

FileOutputStream(String name):创建文件输入流以指定的名称写入文件

public class FileOutputDemo {

public static void main(String[] args) throws IOException {

//创建字节输出流对象,这个子类都会抛出异常FileNotFoundException

FileOutputStream fos=new FileOutputStream(“E:\MyTest\kong.txt”);

File f1=new File(“E:\MyTest\kong.txt”);

System.out.println(f1.createNewFile());

//write会抛出IOException异常,所以他所在得方法中得抛出异常throws也可以try…catch处理

fos.write(49);//1

fos.write(48); //0

fos.write(48);//0

byte arr[]=new byte[10];

fos.write(arr);

//释放资源

fos.close();

}

}

E:\\MyTest\\kong.txt,这个表示我创建在E盘下的Mytest模块下得kong.txt目录,当文件

已经存会创建失败(false),返回的是boolean类型

创建对象做了三件事情:

  • 调用系统功能创建文件。

  • 创建字节输出流对象。

  • 让字节输出流指向创建好的文件。

凡是涉及到IO操做创建的对象都得释放资源。

字节流写数据的三种方式:


import java.io.*;

public class FileOutputStreamDemo02 {

public static void main(String[] args) throws IOException {

//创建输入流对象

FileOutputStream fos=new FileOutputStream(“E:\MyTest\kong03.txt”);

FileOutputStream fos1=new FileOutputStream(new File(“E:\MyTest\kong03.txt”));

//上面两种方式等价

//第一种方式写

fos.write(97); fos.write(98); fos.write(99);

//第二种方式写

byte[]bys={97,98,99,100};//abcd

fos.write(bys);

//第三种方式写

byte[]bys1=“abcd”.getBytes();

fos.write(bys1, 1, 3);//bcd写在文件

//释放资源

fos.close();

}

}

字节流写数据的两个小问题:

有上面的操作可知,我们不难发现这写入的数据没有换行,这看着十分不舒服。

①字节流输入数据换行问题:

  • windows操作系统下:\r\n

  • Linux:\n

  • mac:\r

只需在写数据时加入对应的即可实现换行

②字节流写数据如何追加的问题

只需要在创建指定路径后加true即可。

public FileOutputSteam(String name,boolean append)

import java.io.FileOutputStream;

import java.io.IOException;

public class FileTextZJ {

public static void main(String[] args) throws IOException {

FileOutputStream fos =new FileOutputStream(“E:\MyTest\kong04.txt”,true);

for (int i=0;i<5;i++){

fos.write(“hello\r\n”.getBytes());

}

fos.close();

}

}

下面时运行两次的结果:,达到了我们像要的追加效果。

字节流数据据


1.一次读一个字节

FileInputStream(String name)//写出从哪里读取

没数据到达文件末尾时,返回-1,所以只需根据返回值即可

public class FileInputStreamDemo{

public static void main(String [] args) throw IoException{

FileInputStream fis=new FileInputStream(“E:MyByte\kong02.txt”);

int by;

while(by=fis.read()!=-1){

System.out.println((char)by);

}

fis.close();

}

}

2.一次读一个数组

import java.io.FileInputStream;

import java.io.IOException;

public class FileInputStreamDemo01 {

public static void main(String[] args) throws IOException {

FileInputStream fis=new FileInputStream(“E:\MyTest\kong1.txt”);

byte[]bys=new byte[1024];

int len;

while((len=fis.read())!=-1){

System.out.println(new String(bys,0,len));

}

最后

最后,强调几点:

  • 1. 一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你的简历来问的; 能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试之前好好回顾一下自己所做的项目;
  • 2. 和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是如何使用的;
  • 3. 注意自己开源的Github项目,面试官可能会挖你的Github项目提问;

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目。

面试答案

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

的; 能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试之前好好回顾一下自己所做的项目;

  • 2. 和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是如何使用的;
  • 3. 注意自己开源的Github项目,面试官可能会挖你的Github项目提问;

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目。

面试答案

[外链图片转存中…(img-3352g2VG-1721161437593)]

[外链图片转存中…(img-LsWKaHDp-1721161437594)]

[外链图片转存中…(img-duiFdDOK-1721161437595)]

  • 27
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值