java:IO流(缓冲流、对象流、控制台IO、转换流、java.io.File 类 )
目录
一、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
对象的序列化:将内存中的对象永久的以二进制形式保存到磁盘中。
①创建节点流的对象
②(可选)使用缓冲流包装现有节点流,用于提高效率
③创建对象流包装现有缓冲流,用于序列化
④通过 writeXxx() 方法 Xxx: 对应的数据类型,完成对象的序列化操作
⑤关闭流
⑥需要序列化对象的类必须实现 java.io.Serializable 接口(该类其他属性也必须实现该接口)
⑦需要提供一个序列号,保证如何序列化就如何反序列化
public static final long serialVersionUID = 9239893899894L;
对象的反序列化:将磁盘中的数据进行读取
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
【了解】
System.in : “标准”的输入流
System.out : "标准"的输出流(System.setOut() 可以改变 println 方法的默认输出位置)
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 类 )相关推荐
- java学习--基础知识进阶第十天--标准输入流 转换流 打印流、对象操作流 、Properties集合...
今日内容介绍 u 标准输入流 & 转换流 & 打印流 u 对象操作流 u Properties集合 第1章 标准输入流 & 转换流 & 打印流 1.1 标准输入输 ...
- c#(服务器)与java(客户端)通过socket传递对象_C#(服務器)與Java(客戶端)通過Socket傳遞對象...
最近做項目,需要C#與java間的交互,也就是C#編寫服務器,java編寫客戶端,讓兩者進行通信. 通信無非就是互發數據,首選Socket技術,通過TCP協議建立長連接,一般是以字節數組的形式傳遞數據 ...
- java非闭合xml转对象,不规矩的xml与JAVA对象互相转换的小技巧-使用Marshaller
摘要:将XML文档与JAVA对象互转是很常见的需求,如果XML定义很规整这很好实现.然而在现实中"不规矩"的XML可能更常见,Marshaller便无能为力了吗?下面是一个小技巧, ...
- 【Java代码】坐标系说明+WGS84\GCJ02\BD09坐标系转换工具+Java坐标系转换及验证源代码分享(粘贴可用)
1. 坐标系说明 开发地图应用服务时,一定会接触到各种坐标系,而保证坐标系的正确与合理是一切数据分析的前提,总的来说,坐标系可以分为两大类:地理坐标系GCS(Geographic Coordinate ...
- java代码实现读写txt文件(txt文件转换成java文件)
项目中要求批量txt文件可以转换为java文件或xml文件,以下主要是总结的几种IO读写的方法: 1.按行读写txt文件和java文件,以treemap默认升序的有序map类型保存读写的结果转换 ...
- Java高级:IO流、File类、抽象基类、节点流、缓冲流、图片加密、其他流、对象流、随机存取文件流
package com.atguigu.java3;import org.junit.Test;import java.io.File; import java.io.IOException; imp ...
- java(十)【属性集,缓冲流、转换流、序列化流】
day10[缓冲流.转换流.序列化流] 今日目标 IO资源的处理. finnally释放资源 jdk 1.7开始的新技术 try-with-resources 缓冲流 提高字节流和字符流读写数据的性能 ...
- Java语言高级(第四部分)File类与IO流 ->(个人学习记录笔记)
文章目录 第六章 File类与IO流 1. File类 1.1 概述 1.2 构造方法 1.3 常用方法 获取功能的方法 绝对路径和相对路径 判断功能的方法 创建删除功能的方法 1.4 目录的遍历 2 ...
- day12 字符流、字符缓冲流、转换流、对象操作流、Properties
目录 一.字符流 1.1 字节流操作文本文件出现乱码问题 1.2 编码表 1.3 String字符串中编码和解码的方法 1.3.1.编码 1.3.2.解码 1.4 字节流读取中文出现乱码的原因 1.5 ...
最新文章
- PHP 毫秒级定时器,实现php毫秒定时器方法详解
- Linux系统文件目录
- HDU 6186 CS Course
- Keras序列模型学习
- 指针的动态初始化malloc与销毁free
- properties类_受不了springboot的yml和properties配置,我扩展出了groovy配置
- Extjs 从grid中导出Excel表格。后台为C#(绝对好用)(按照自己的需求修改版本)...
- 苹果6软件服务器验证失败是怎么回事,iPhone6手机出现验证错误怎么办?
- Python静态方法 类方法
- [团队项目]典型用户 - 场景(用户故事) - 任务 - 具体工作流程
- 卧槽!火爆GitHub的算法电子书开放下载了!
- 电销机器人源码支持私有云和本地部署
- .NET in China - What's New in .NET
- Jquery实现右下角弹窗警告并且实现提示声
- 休谟问题和金岳霖的回答
- MATLAB实现巴特沃斯数字滤波器
- 精美的mac屏保需要?试试Aerial 2.1.3汉化版支持big sur!
- 文本生成视频Make-A-Video,根据一句话就能一键生成视频 Meta新AI模型
- adaboost训练 之 强分类器训练原理
- c++类和对象(类的概念)
热门文章
- java项目第8期-在线游戏商城系统【毕业设计】
- php获取后面参数?id=进行判断参数跳转目标站
- UVALive 3351 Easy and Not Easy Sudoku Puzzles 位运算~判断简单数独
- PS抠图,更改电脑主板的背景
- 计算机桌面应用程序图标不见了怎么办,我的电脑图标不见了怎么办 图标消失解决方法...
- STM32MP157A驱动开发 | 06 - 使用Linux内核自带的eeprom atmel驱动(AT24C02)
- fastai入门教程和基本概念
- CentOS 7.6 64 系统镜像下载及安装
- Ackerman函数(递归与非递归算法实现)
- OK JUMPSTART三期项目En-Tan-Mo抢购结束,火爆程度超出预期