Java I/O流
Java I/O
数据来源于数据源-》【输入】在程序中进行操作-》【输出】保存到文件中
文件
Java API:java.io.File类
File类访问文件属性
File file = new File(String pathname);// c:/test.txt
File指文件也可以指目录
绝对路径:相对于某个软件的地址
相对路径:完整的路径名
File(); 括号里直接写文件会创建到eclipse的相对路径
- file.createNewFile(); 创建一个文件
- file.exist(); 文件是否存在
- file.isFile(); 文件是否为文件
- file.isDirectory(); 文件是否为目录
- file.delete(); 删除文件
- file.getName();获取文件名称
- file.getPath(); 获取文件相对路径
- file.getAbsolutePath();获取文件绝对路径
- file.length();获取文件字节
流
inputStream 输入流 读数据 以Writer作为基类
outputStream 输出流 写数据 以Reader作为基类
按流向分:输入流和输出流
按照处理数据单元分: 字节流和字符流
一个字节8位,一个字符16位
字节流:
字节输入流InputStream基类
字节输出流OutputStream基类
字符流:
字符输入流Reader基类
字符输出流Writer基类
字节流
InputSraeam(抽象类)
int read(); 从输入流一个字节一个字节的读,返回的是该字节的整数表示形式,如果到了输入流的末尾,返回-1
int read(byte[]);从输入流读取若干字节,把这些字节保存到数组b中,返回的是读取到的字节数,如果到了输入流的末尾,返回-1
int read(byte[] b, int off, int len);从输入流读取若干字节,把这些字节保存到数组b中,off指的是字节数组中开始保存数据的起始下标,len指读取的字节数目。返回的是读取到的字节数,如果到了输入流的末尾,返回-1
void close(); 关闭流
int available(); 可以从输入流中读取的字节数目
FileInputStream(子类)
FileInputStream fis = new FileInputStream(File file或地址);
OutputStream(抽象类)
- void write(int c);
- void write(byte[] buf);
- void write(byte[], off, len);
- void close();
- void flush(); 强制将缓冲区清空
FileOutputStream(子类)
new FileOutputStream(File file);
new FileOutputStream(String path);
new FileOutputStream(String path, boolean append); append为true进行内容追加
字符流
GBK GB2312 中文编码
UTF-8 国际通用
字符输入流(读)
Reader
Reader类
read() 挨个读取字符
read(char[]) 读取字符到char数组
read(char[],off,len) 读取字符到char数组,off起始位置,len字符数目
close() 关闭流
InputStreamReader:(适配器模式)可以指定字符编码格式
new InputStreamReader(InputStream in)
// 指定字符编码charSetName
new InputStreamReader(InputStream in,String charSetName)
FileReader(子类)
new FileReader(File file) // 构造
new FileReader(String path)
常见问题:中文乱码
原因:文件编码格式 和 程序环境的编码格式不一致
解决方案:
字符流去读的时候,指定字符流的编码格式
FileReader 无法指定编码格式,会按照系统默认编码格式读
System.out.println(System.getProperty(“file.encoding”));
所以使用InputStreamReader
FileInputStream fis = new FileInputStream("J:/qingniao/test.txt");
fr = new InputStreamReader(fis,"GBK");
缓冲流BufferedReader
将数据源的数据一次性读到缓冲区里,避免重复操作文件。
readLine()
输出要关闭缓冲流
字符输出流(写)
Writer
write(String)
close()
flush():清空缓存
OutputStreamWriter:(适配器模式)可以指定字符编码格式
new OutputStreamWriter(IOutputStream in)
// 指定字符编码charSetName
new OutputStreamWriter(OutputStream in,String charSetName)
FileWriter:一下两种构造,都可以重载,指定一个boolean是否在末尾添加
new FileWriter(File file)
new FileWriter(String path)
BufferedWriter
BufferedWriter类是Writer类的子类,带有缓冲区
常用构造方法BufferedWriter(Writer out)
二进制文件的读写
DataInputStream
DataOutputStream
示例:
public class CopyPic {
public static void main(String[] args) {
// 输入流
FileInputStream fis = null;
DataInputStream dis = null;
// 输出流
FileOutputStream fos = null;
DataOutputStream dos = null;
try {
fis = new FileInputStream("j:/qingniao/1.jpg");
dis = new DataInputStream(fis);
fos = new FileOutputStream("j:/qingniao/2.jpg");
dos = new DataOutputStream(fos);
int temp;
while((temp = dis.read())!=-1) {
dos.write(temp);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
dis.close();
fis.close();
fos.close();
dos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
序列化和反序列化
内存(Java对象)-流(二进制的字节序列)
序列化是将对象的状态写入到特定的流中的过程
反序列化则是从特定的流中获取数据重新构建对象的过程
Serializable
ObjectInputStream 反序列化 readObject()->>类型转换
ObjectOutputStream 序列化 writeObject(stu)
常见异常:
NotSerializableException:类没有实现Serializable
transient屏蔽某些敏感字段的序列化
智能推荐
更改springboot启动拼成的字母
1.更改springboot启动拼成的字母 其实很好改,只需要在resources下新建一个txt文件就可以,命名为banner.txt,那这种字符该怎么拼出来呢,下面推荐一个网址,有这种工具 传送门 2.集成...
Node.js安装配置
好久都没更新博客了,今天心血来潮,决定是时候更新一篇了,首先我们来认识一下node.js。 什么是node.js? 简单的说 Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的...
RocketMQ之双Master集群搭建笔记记录
一:RocketMQ双master集群部署 服务器环境(我采用的虚拟机,centos6 .5【特别注意:安装的虚拟机centos系统一定得是64位的,32位的会启动不起来。即便起来了也会有很多问题,深坑勿踩】) ip 用户名 密码 角色 模式 192.168.197.101 root nameServer1,brokerServer1 ...
多线程爬取4k超高清美图壁纸
多线程爬取4k美图壁纸 前言:看完此篇文章你可以更加深入的了解多线程的使用,并且最重要的你能够下载你自己想要的超高清4k壁纸 爬取结果: 1. 分析网站 要爬取的url :http://pic.netbian.com/ a) 判断网页是动态加载还是静态加载页面。右击查看网页源代码,按Ctrl + f在源代码中搜索网站的详情页地址,从而判断整个网页是静态加载的 b) 明确爬取的目标。我们要爬取的目标...
猜你喜欢
elementUI-添加自定义图标
elementui的小图标有限,跟UI给的不一样,这个时候咋办呢?百度走起。。。。参考了两篇博主分享的 自定义elementui中的图标 和 建立图标库,这里主要用到第一种 实际中: elementUI导航栏 具体代码: 汉字转换Unicode编码: 直接打开控制台: 汉字.chatCodeAt().toString(16); 然后回车; 至于三角形的图标,我直接把箭头的 unicode 值改成了...
[Linux]——文件缓冲区
文件缓冲区 提到文件缓冲区这个概念我们好像并不陌生,但是我们对于这个概念好像又是模糊的存在脑海中,之间我们在介绍c语言文件操作已经简单的提过这个概念,今天我们不妨深入理解什么是文件缓冲区。 为什么需要文件缓冲区 当我们在程序中写下一条printf语句时,我们希望将这条语句的内容打印到屏幕上。但是如果你将语句放在循环中,难道你执行一次循环那么操作系统就要打印一次这条数据么?答案当然不是 我们对于程序...
基于FPGA的IIC协议详解——EEPROM控制器(1)
IIC协议举例 常用IIC协议使用地方 常见IIC协议的注意点 24LC64芯片读写命令的时序图 eeprom控制器的系统框图 时序图设计 代码设计 EEPROM控制器测试模块的代码 结束语 常用IIC协议使用地方 熟悉一个协议一定要知道这个协议应该用到什么地方,IIC协议作为飞利浦公司定义的一个慢速传输协议,常用于: 1、芯片寄存器的配置; 2、eeprom的读写; 本次实验我们将使用eepro...
ssm 工程简易搭建(idea 工具下)
现在都流行springboot了,大部分都给你配合了了,可以快速开发。但是今天我们回顾一下ssm的搭建,其实也挺简单的,比刚入门那会觉得简单多了。 这个先讲几点: 1.开始搭建前,idea 自己要配置maven 和tomcat和jdk ,这里就不讲了。 2.为了简化配置,我们按照“约定优于配置”的原则(这种原则在sprigboot项目里面特别明显),启动项目时,项目有个文件...
oracle简单视图read only、check option和默认权限的异同(相对于DML语句)
视图分为俩类: 简单视图: 视图所代表的sql中如果没有group by语句, 没有组函数,查询的只有一张表,那么这样的视图就是简单视图. 复杂视图 视图所代表的sql中如果有group by语句, 或者有组函数,或者查询的是多张表,那么这样的视图就是复杂视图. s_emp表格属性 默认权限 1.可以插入不满足where条件的数据,原表也会更...