目录

一、IO 流的结构体系

二、缓冲流:BufferedInputStream & BufferedOutputStream

三、对象流:ObjectInputStream & ObjectOutputStream

四、控制台IO

五、转换流 InputStreamReader & OutputStreamWriter

六、java.io.File 类 :


一、IO 流的结构体系

  • 字符流:用于操作文本文件 .txt .java
  • 字节流:用于操作非文本文件 .avi .mp3 .jpg

二、缓冲流:BufferedInputStream & BufferedOutputStream

处理流的一种,包装现有节点流,用于提高效率,内置缓冲区

//非文本文件的复制
@Test
public void test1(){//3. 创建 BufferedInputStream 的实例,包装对应的节点流,用于提高效率BufferedInputStream bis = null;//4. 创建 BufferedOutputStream 的实例,包装对应的节点流,用于提高效率BufferedOutputStream bos = null;try {//1. 创建 FileInputStream 的实例,同时打开指定文件FileInputStream fis = new FileInputStream("C:\\Users\\LI/Desktop/1.jpg");//2. 创建 FileOutputStream 的实例,同时打开指定文件FileOutputStream fos = new FileOutputStream("C:\\Users\\LI\\Desktop\\2.jpg");bis = new BufferedInputStream(fis);bos = new BufferedOutputStream(fos);//5. 通过 read(byte[] b)读取指定文件的内容byte[] b = new byte[1024];int len = 0; //接收实际读取的字节总数while((len = bis.read(b)) != -1){//6. 通过 write(byte[] b, int off, int len) 将读取的内容写到目标地点去bos.write(b, 0, len);//bos.flush();//强制清空换缓冲区,但是会影响效率}} catch (IOException e) {e.printStackTrace();} finally {//7. 关闭流if(bos != null){try {bos.close();} catch (IOException e) {e.printStackTrace();}}if(bis != null){try {bis.close();} catch (IOException e) {e.printStackTrace();}}}
}

三、对象流:ObjectInputStream & ObjectOutputStream

  1. 对象的序列化:将内存中的对象永久的以二进制形式保存到磁盘中。

    ①创建节点流的对象

    ②(可选)使用缓冲流包装现有节点流,用于提高效率

    ③创建对象流包装现有缓冲流,用于序列化

    ④通过 writeXxx() 方法 Xxx: 对应的数据类型,完成对象的序列化操作

    ⑤关闭流

    ⑥需要序列化对象的类必须实现 java.io.Serializable 接口(该类其他属性也必须实现该接口)

    ⑦需要提供一个序列号,保证如何序列化就如何反序列化

    public static final long serialVersionUID = 9239893899894L;

  2. 对象的反序列化:将磁盘中的数据进行读取

public class ObjectStreamTest {// 反序列化@Testpublic void test1() {ObjectInputStream ois = null;try {FileInputStream fis = new FileInputStream("./person.dat");BufferedInputStream bis = new BufferedInputStream(fis);ois = new ObjectInputStream(bis);List<Person> list = (List<Person>) ois.readObject();Iterator<Person> it = list.iterator();while(it.hasNext()){Person p = it.next();System.out.println(p);}} catch (ClassNotFoundException | IOException e1) {e1.printStackTrace();} finally {if (ois != null) {try {ois.close();} catch (IOException e) {e.printStackTrace();}}}}// 序列化public static void main(String[] args) {Person p1 = new Person("张三", 18, 98.88);Person p2 = new Person("李四", 20, 100.22);Person p3 = new Person("王五", 38, 300.33);List<Person> list = new ArrayList<>();list.add(p1);list.add(p2);list.add(p3);ObjectOutputStream oos = null;try {FileOutputStream fos = new FileOutputStream("./person.dat");BufferedOutputStream bos = new BufferedOutputStream(fos);oos = new ObjectOutputStream(bos);oos.writeObject(list);} catch (IOException e) {e.printStackTrace();} finally {if (oos != null) {try {oos.close();} catch (IOException e) {e.printStackTrace();}}}}}

四、控制台IO

【了解】

  1. System.in : “标准”的输入流

  2. System.out : "标准"的输出流(System.setOut() 可以改变 println 方法的默认输出位置)

  3. System.err :"标准"的错误输出流

打印流:PrintStream & PrintWriter

五、转换流 InputStreamReader & OutputStreamWriter

编码:字符串 -> 字节数组   OutputStreamWriter

//编码@Testpublic void test2(){String str = "好好学习天天向上!";BufferedWriter bw = null;try {//注意:应该使用字符流操作文本文件,暂时为了演示转换流的用法,使用字节流操作文本文件FileOutputStream fos = new FileOutputStream("hello.txt");OutputStreamWriter osw = new OutputStreamWriter(fos, "GBK");bw = new BufferedWriter(osw);bw.write(str);} catch (IOException e) {e.printStackTrace();} finally {if(bw != null){try {bw.close();} catch (IOException e) {e.printStackTrace();}}}}

解码:字节数组 -> 字符串

 //解码@Testpublic void test3(){BufferedReader br = null;try {FileInputStream fis = new FileInputStream("hello.txt");InputStreamReader isr = new InputStreamReader(fis, "ISO8859-1");br = new BufferedReader(isr);String str = br.readLine();System.out.println(str);} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {br.close();} catch (IOException e) {e.printStackTrace();}}}

六、java.io.File 类 :

描述文件或目录,用于操作文件或目录新建、删除、重命名等基本操作

若需要操作文件的内容,File 对象将无能为力,需要使用 IO 流

通常 File 对象与 IO 配合使用,将 File对象作为参数传递给 IO 流的构造器。

访问文件名:

  • getName() :获取文件名
  • getPath():获取相对路径
  • File getAbsoluteFile() :获取绝对路径的 File 对象
  • String getAbsolutePath() :获取绝对路径对应的字符串
  • getParent():获取父路径
  • renameTo(File newName) :重命名
  • file1.renameTo(file2) : file1 必须存在,file2 必须不存在

文件检测

  • exists() : 判断文件或目录是否存在
  • canWrite() : 判断是否可写
  • canRead() :是否可读
  • isFile() :判断是不是一个文件
  • isDirectory() :判断是不是一个目录

获取常规文件信息

  • lastModified() :获取最后修改时间对应的毫秒值
  • length():获取文件的大小,但是注意目录没有大小

文件操作相关

  • createNewFile() :创建一个“文件”
  • delete() :删除文件,若需要删除目录必须将目录中所有的内容全部删掉再删当前目录

目录操作相关

  • mkDir() :新建一个目录,如:e:/io/abc 若io包不存在则abc不能创建,若io存在则abc可以创建成功
  • mkDirs() :新建目录,如:e:/io/abc 若io包不存在则自动创建io包
  • String[] list():获取指定目录下所有的文件列表字符串名称
  • File[] listFiles():获取指定目录下所有文件和目录的 File 对象

java:IO流(缓冲流、对象流、控制台IO、转换流、java.io.File 类 )相关推荐

  1. java学习--基础知识进阶第十天--标准输入流 转换流 打印流、对象操作流 、Properties集合...

    今日内容介绍 u  标准输入流 & 转换流 & 打印流 u  对象操作流 u  Properties集合 第1章 标准输入流 & 转换流 & 打印流 1.1 标准输入输 ...

  2. c#(服务器)与java(客户端)通过socket传递对象_C#(服務器)與Java(客戶端)通過Socket傳遞對象...

    最近做項目,需要C#與java間的交互,也就是C#編寫服務器,java編寫客戶端,讓兩者進行通信. 通信無非就是互發數據,首選Socket技術,通過TCP協議建立長連接,一般是以字節數組的形式傳遞數據 ...

  3. java非闭合xml转对象,不规矩的xml与JAVA对象互相转换的小技巧-使用Marshaller

    摘要:将XML文档与JAVA对象互转是很常见的需求,如果XML定义很规整这很好实现.然而在现实中"不规矩"的XML可能更常见,Marshaller便无能为力了吗?下面是一个小技巧, ...

  4. 【Java代码】坐标系说明+WGS84\GCJ02\BD09坐标系转换工具+Java坐标系转换及验证源代码分享(粘贴可用)

    1. 坐标系说明 开发地图应用服务时,一定会接触到各种坐标系,而保证坐标系的正确与合理是一切数据分析的前提,总的来说,坐标系可以分为两大类:地理坐标系GCS(Geographic Coordinate ...

  5. java代码实现读写txt文件(txt文件转换成java文件)

    项目中要求批量txt文件可以转换为java文件或xml文件,以下主要是总结的几种IO读写的方法:    1.按行读写txt文件和java文件,以treemap默认升序的有序map类型保存读写的结果转换 ...

  6. Java高级:IO流、File类、抽象基类、节点流、缓冲流、图片加密、其他流、对象流、随机存取文件流

    package com.atguigu.java3;import org.junit.Test;import java.io.File; import java.io.IOException; imp ...

  7. java(十)【属性集,缓冲流、转换流、序列化流】

    day10[缓冲流.转换流.序列化流] 今日目标 IO资源的处理. finnally释放资源 jdk 1.7开始的新技术 try-with-resources 缓冲流 提高字节流和字符流读写数据的性能 ...

  8. Java语言高级(第四部分)File类与IO流 ->(个人学习记录笔记)

    文章目录 第六章 File类与IO流 1. File类 1.1 概述 1.2 构造方法 1.3 常用方法 获取功能的方法 绝对路径和相对路径 判断功能的方法 创建删除功能的方法 1.4 目录的遍历 2 ...

  9. day12 字符流、字符缓冲流、转换流、对象操作流、Properties

    目录 一.字符流 1.1 字节流操作文本文件出现乱码问题 1.2 编码表 1.3 String字符串中编码和解码的方法 1.3.1.编码 1.3.2.解码 1.4 字节流读取中文出现乱码的原因 1.5 ...

最新文章

  1. PHP 毫秒级定时器,实现php毫秒定时器方法详解
  2. Linux系统文件目录
  3. HDU 6186 CS Course
  4. Keras序列模型学习
  5. 指针的动态初始化malloc与销毁free
  6. properties类_受不了springboot的yml和properties配置,我扩展出了groovy配置
  7. Extjs 从grid中导出Excel表格。后台为C#(绝对好用)(按照自己的需求修改版本)...
  8. 苹果6软件服务器验证失败是怎么回事,iPhone6手机出现验证错误怎么办?
  9. Python静态方法 类方法
  10. [团队项目]典型用户 - 场景(用户故事) - 任务 - 具体工作流程
  11. 卧槽!火爆GitHub的算法电子书开放下载了!
  12. 电销机器人源码支持私有云和本地部署
  13. .NET in China - What's New in .NET
  14. Jquery实现右下角弹窗警告并且实现提示声
  15. 休谟问题和金岳霖的回答
  16. MATLAB实现巴特沃斯数字滤波器
  17. 精美的mac屏保需要?试试Aerial 2.1.3汉化版支持big sur!
  18. 文本生成视频Make-A-Video,根据一句话就能一键生成视频 Meta新AI模型
  19. adaboost训练 之 强分类器训练原理
  20. c++类和对象(类的概念)

热门文章

  1. java项目第8期-在线游戏商城系统【毕业设计】
  2. php获取后面参数?id=进行判断参数跳转目标站
  3. UVALive 3351 Easy and Not Easy Sudoku Puzzles 位运算~判断简单数独
  4. PS抠图,更改电脑主板的背景
  5. 计算机桌面应用程序图标不见了怎么办,我的电脑图标不见了怎么办 图标消失解决方法...
  6. STM32MP157A驱动开发 | 06 - 使用Linux内核自带的eeprom atmel驱动(AT24C02)
  7. fastai入门教程和基本概念
  8. CentOS 7.6 64 系统镜像下载及安装
  9. Ackerman函数(递归与非递归算法实现)
  10. OK JUMPSTART三期项目En-Tan-Mo抢购结束,火爆程度超出预期