import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
public class Demo03 {
public static void main(String[] args) throws IOException {
/**
int read()
读取单个字符。
int read(char[] cbuf)
将字符读入数组。
int read(char[] cbuf, int off, int len)
将字符读入数组的某一部分。
*/
FileReader reader = new FileReader("world.txt");
char[] c = new char[4];
int len;
len = reader.read(c);
System.out.println(len);
System.out.println(Arrays.toString(c));
len = reader.read(c);
System.out.println(len);
System.out.println(Arrays.toString(c));
len = reader.read(c);
System.out.println(len);
System.out.println(Arrays.toString(c));
len = reader.read(c);
System.out.println(len);
System.out.println(Arrays.toString(c));
len = reader.read(c);
System.out.println(len);
System.out.println(Arrays.toString(c));
reader.close();
}
}
1.3 字符输出流
抽象类Writer
写入字符流的抽象类。
实现类OutputStreamWriter
FileWriter
用来写入字符文件的便捷类。
创建对象和写入数据
import java.io.FileWriter;
import java.io.IOException;
public class Demo01 {
public static void main(String[] args) throws IOException {
/**
FileWriter(String fileName)
根据给定的文件名构造一个 FileWriter 对象。
FileWriter(String fileName, boolean append)
根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
*/
FileWriter writer = new FileWriter("hehe.txt",true);
/**
void write(char[] cbuf, int off, int len)
写入字符数组的某一部分。
void write(int c)
写入单个字符。
void write(String str, int off, int len)
写入字符串的某一部分。
*/
writer.write("斯是陋室惟吾德馨。");
writer.close();
}
}
1.4 使用字符流复制小说
1、创建字符流镀锡
2、循环读写数据
3、关闭流
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Demo02 {
public static void main(String[] args) throws IOException {
/**
* 复制小说
* 1、创建流对象
* 2、读写数据
* 3、关闭流
*/
// 创建流对象
FileReader reader = new FileReader("D:\threeCountry.txt");
FileWriter writer = new FileWriter("C:\Users\dushine\Desktop\threeCountry.txt");
// 循环读写
char[] c = new char[1024];
int len = -1;
while ((len = reader.read(c)) != -1) {
writer.write(c, 0, len);
}
writer.flush();
// 关闭流
writer.close();
reader.close();
System.out.println("OVER");
}
}
二、转换流
2.1 概述
解决乱码问题
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Demo01 {
public static void main(String[] args) throws IOException {
/**
* 解决乱码
* --UTF-8的格式读取内容
* --GBK的格式写入内容
*/
// 创建转换流对象
InputStreamReader isr = new InputStreamReader(new FileInputStream("Day19笔记--IO.md"), "UTF-8");
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("Day19笔记--IO-副本.md"), "GBK");
// 循环读写
char[] c = new char[1024];
int len = -1;
while ((len = isr.read(c)) != -1) {
osw.write(c, 0, len);
}
// 关闭流
osw.close();
isr.close();
System.out.println("OVER");
}
}
三、对象流
3.1 概述
传输对象
发送数据【序列化】
接收数据【反序列化】
3.2 案例
收发JDK内置类型
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class Demo01 {
public static void main(String[] args) throws IOException {
/**
* 写入数据
*/
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("file"));
oos.writeObject(1000);
oos.writeObject(3.14);
oos.writeObject("Hello");
oos.writeObject(true);
oos.writeObject(new int[] {11,22,33,44,55});
oos.close();
System.out.println("OVER");
}
}