IO流其实很简单 我不打算学的深入 够用就行了
首先看一个不太好友好的东西
这张图看完 我们记住1个知识点,
- 1 末尾是Steram是字节流 其他的都是字符流
这张图看完 我们也记住1个知识点
- 1 字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件,
四个类
public static void main(String[] args) throws IOException {
//=============================字节流 读取=========================================
// 路径必须正确
FileInputStream fis = new FileInputStream("D:/mcd/create.txt");
int num=fis.available();//返回的是目标文件中的字符个数,也是InputStream类中所特有的方法
byte[]buf=new byte[num];
fis.read(buf);//此种方法虽然简化了程序,提高了效率,但是用法不安全,容易造成内存溢出。
System.out.println(new String(buf));
fis.close();
//=============================字节流 写入=========================================
FileOutputStream fos=new FileOutputStream("D:/mcd/create.txt",true);//如果文件不存在,则创建它。如果存在,则覆盖他。 true 是否追加
fos.write("12321".getBytes());//getBytes()使用平台的默认字符集将此
/* 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
* 此方法与FileWriter方法有区别:在不刷新缓冲区情况下,他直接将数据写入文件;因为他操作的是字节数据,不需要转化;
* FileWriter虽然操作的是字符,但其底层还是操作的是字节,在把数据写入缓冲区/内存是,虚拟机会将相应的字符和一张码表对应(本机器的是GBK的,可以通过System.getProperties()方法查看)
* 然后将相应的字符转化为相应的字节,所以会在内存中驻留,需用flush刷新该缓冲区,将其写入文件
*/
fos.close();
//=============================字符流 写入=========================================
FileReader fr=null;//定义在try块的外面
try{
fr=new FileReader("D:/mcd/create.txt");
int number=0;
int reads=0;
//while((reads=fw.read())!=-1)System.out.print((char)reads);//不带参数的read方法,返回的是所读取字符的ASCII码
char []a=new char[1024];
while((number=fr.read(a))!=-1){//调用的是带字符数组参数的read方法,返回的是所读取的字符个数;相比前一种,此种效率更快;
System.out.print(new String(a,0,number));
}
}catch(IOException e){
e.printStackTrace();//默认情况是把异常打印到控制台上
}finally{
try{
if(fr!=null)fr.close();//关闭流
}
catch(IOException e){
e.printStackTrace();
}
}
//=============================字符流 读取=========================================
// TODO Auto-generated method stub
//创建一个FileWriter对象,该对象一被初始化就必须要明确要被操作的文件
//而且该文件会被创建到指定的目录下,如果该目录下有同名文件,则覆盖它;如果不想覆盖原来内容,可以在创建流对象时向构造函数在加一个参数true。
//其实该步就是要明确存放数据的目的地
FileWriter fw=new FileWriter("D:/mcd/create.txt",true);
fw.write("abc");
//fw.close();
fw.flush();//刷新,把缓冲里面的数据刷新到目标文件中,如果没有这步,将无法写入数据;
fw.close();
}
工具
文件切割
应用场景
- 字符流:字符流一般用于处理纯文本类型的文件,如TXT文件等,
- 字节流:可以用来处理纯文本文件,但是字符流不能用于处理图像视频等非文本类型的文件。字节流一般用来处理图像,视频,以及PPT,Word类型的文件。
面试
总结
目录 | 地址 |
---|---|
ByteArrayInputStream | https://blog.csdn.net/qq_37593817/article/details/115967517 |