BufferedReader br = null;
BufferedWriter bw = null;
try{
br = new BufferedReader(new FileReader("d:\\Iotest\\source.txt"));
bw = new BufferedWriter(new FileWriter("D:\\test.txt"));
String str;
while((str=br.readLine())!=null){
bw.write(str);
bw.newLine();
bw.flush();
}catch(){
}finaly{
八、转换流
字符流 = 字节流 + 编码表
InputStreamReader:从字节流到字符流的桥梁
它读取字节,并使用指定的编码将其解码为字符,它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集
InputStreamReader(InputStream in)
InputStreamReader(InputStream in,String charsetName)
OutputStreamWriter:从字符流到字节流
是从字符流到字节流的桥梁,使用指定的编码将写入的字符编码为字节它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认编码集
OutputStreamReader(OutputStream in)
OutputStreamReader(OutputStream in,String charsetName)
九、标准输入、输出流
System.in 和 System.out 分别代表了系统标准的输入输出设备
默认:键盘、显示器
System.in类型是InputStream
System.out是OutputStream的子类FilterOutputStream的子类
重定向:通过System类的setIn和setOut方法改变默认设备的输入输出
public static void setIn(InputStream in)
public static void setOut(Outputstream out)
| InputStream | 标准输入流-Scanner |
|---|
| PrintStream | 标准输出流-System.out |
| PrintStream | 字节打印流 |
| PrintWriter | 字符打印流 |
十、打印流
实现将基本数据类型的数据格式转化为字符串输出
打印流:PrintStream和PrintWriter
提供重载的print()和prinln()方法
不会抛出异常
有自动flush功能
PrintStream打印使用平台默认字符编码转换为字节,需要写入字符不是字节时用PrintWriter
System.out返回PrintStream实例
| InputStream | 标准输入流-Scanner |
|---|
| PrintStream | 标准输出流-System.out |
| PrintStream | 字节打印流 |
| PrintWriter | 字符打印流 |
十一、数据流
数据流的两类
DataInputStream+DataOutputStream
xxx readXxx()....../xxx writeXxx()
String readUTF()
十二、对象流
ObjectInputStream和ObjectOutputStream
用于存储和读取基本数据类型或对象的处理流。强大之处:把java对象写入数据源中,也能把对象从数据源还原回来
序列化:用ObjectOutputStream类保存基本类型数据或对象的机制
反序列化:用ObjectInputStream类读取基本类型或对象的机制
二者不能序列化static和transient修饰成员变量
对象序列化机制
允许把内存中java对象转换成平台无关的二进制流。持久保存在磁盘,通过网络传输。
将实现了serializable接口的对象转化成字节数据,可以随时还原
序列化是RMI(Remote Method Invoke-远程方法调用)过程的参数和返回值都必须实现的机制,而RMI是javaEE的基础,因此序列化是javaEE的基础
支持序列化机制的前提:实现Serializable或Externalizable,否则报NotSerializableException
序列化标识符的静态变量:serialVersionUID。序列化版本控制
不显示定义的话,根据加吧运行环境自动生成,若类实例变量改变,该值可能变。建议显示声明。
通过SerialVersionUID判断版本是否一致。反序列化UID不一致抛出InvalidCastException
使用对象流序列化对象
1.创建一个ObjectOutputStream
2.调用对象的writeObject(对象)输出可序列化对象
3.注意写出一次,操作flush一次
1.创建ObjectInputStream
2.调用readObject()方法读取流中的对象
强调:如果某个类属性是其他引用类型,那么这个这个属性引用类型必须可序列化,否则当前类不可序列化。
十三、随机存取文件流
RandomAccessFile类
声明在java.io包下,直接继承java.lang.Object类。并实现了DataInput、DataOutput两个接口。
支持“随机访问”方式。程序可以直接跳到文件的任意地方来读写。
对象包含一个指针,来标记读写位置
@ long getFilePointer():获取文件记录指针的当前位置
@ void seek(long pos):将文件记录指针定位到pos位置
@ RandomAccessFile(File file,String mode)
@ RandomAccessFile(String name,String mode)
mode参数,指定RandomAccessFile的访问模式:
r、rw、rwd读写+同步内容更新、rws读写+同步内容和元数据更新
r:读存在文件,不在报错;rw:不在创建
十四、NIO.2中Path、 Paths、Files类的使用
Java NIO概述
java NIO(new IO)是java1.4引入的。与原来io有相同的作用目的,但使用方式不同。NIO面向缓冲区(IO面向流的)、基于通道的IO操作。更高效。
提供了两套NIO,一个是标准的NIO,另一个是网络编程的NIO。
NIO.2
随着JDK7的发布,增强了文件处理和文件系统特性的支持。
Path、Paths和Files
Path接口:代表一个平台无关的平台路径,描述了目录结构中文件的位置。Path可以看成是File的升级版本,实际引用资源也不存在。
inport java.io.File;
File file = new File("index.html");
java7之后
import java.nio.file.Path;
import java.nio.file.Paths;
Path path = Paths.get("index.html");
Paths:包含了两个返回Path的静态工厂的方法
Paths类提供静态get()方法来获取Path对象
static Path get(String first,String... more):用于将多个字符串串连成路径
static Path get(URI uri):返回指定uri对应的Path路径
Files
Files包含了大量静态的工具方法来操作文件
在线查看:java IO流
私信获取知识图谱!感谢支持!
复制代码