字节输入输出 缓冲流 字符输入输出 缓冲流 转换流 序列化流 打印流
1.BufferedOutputStream( OutputStream out, int size ) size可选,设置一次读取大小 1024整数
底层创建一个数组一次读取多个 以达到缓冲的作用, 类似前面字节输入流 的 read( byte [ ] ) 传入数组 加快读取速度
2. BufferedInputStream(InputStream in, int size)
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("img.jpg");
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("wode.jpg"));
int num;
byte[] bytes = new byte[1024];
while ((num=bis.read(bytes))!=-1){
bos.write(bytes,0,num);
}}
1.BufferedWriter( ) BufferedReader( ) 包装字符输出输入流
字符输出流多了一个方法 newLine() 写一个换行,支持所有系统
字符输入流多了一个方法 readLine() 读取一行 不包括\n\r\t 这些作为一行标志 , 但结束标志是null
BufferedWriter bdw = new BufferedWriter(new FileWriter("我的小作文.txt"));
for (int i = 0; i < 5; i++) {
bdw.write("我我我我冲啊冲啊");
bdw.newLine();
}
bdw.close();
BufferedReader br = new BufferedReader(new FileReader("我的小作文.txt"));
char[] chars = new char[1024];
int num ;
while ((num=br.read(chars))!=-1){
System.out.println(new String(chars,0,num));
}
特有方法一行一行的读取
String line;
while ((line=br.readLine())!=null){
System.out.println(line);
}
1.针对 字节输入流 与字节输出流
设置写入编码
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("我是gbk.txt"),"gbk");
osw.write("你好啊");
osw.close();
设置读取编码
InputStreamReader isr = new InputStreamReader(new FileInputStream("我是gbk.txt"),"gbk");
char[] chars = new char[1024];
int num;
while ((num=isr.read(chars))!=-1) {
System.out.println(chars);
}
1.针对对象 把对象写入文件称为 序列化 从文件读取对象 ,称为 反序列化
2. 使用ObjectOutputStream对象中的方法writeObject,把对象写入到文件中
3.使用ObjectInputStream对象中的方法readObject读取保存对象的文件
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("10_IO\\person.txt"));
oos.writeObject(new Person("小美女",18));
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("10_IO\\person.txt"));
Object o = ois.readObject();
System.out.println(o);
Person p = (Person)o; 强转为Person对象
System.out.println(p.getName()+p.getAge());
4.Person对象要求
1.必须实现Serializable 接口 就是一个标志,才能被序列化
2.serialVersionUID 用于对象标志特有标志手动设置, 数值任意 用于修改类对象时,还能被反序列化
public class Person implements Serializable{
private static final long serialVersionUID = 1L;
private String name;
public int age;
...重写toString get,set 两个构造方法省略
}
1java.io.PrintStream extends OutputStream: 打印流
2.构造方法:
1.PrintStream(String fileName) : 输出的目的地是一个文件路径 println 或print 原样打印所有 内容
PrintStream ps = new PrintStream("10_IO\\print.txt");
ps.write(97); 调用write 文件内容是a
ps.println(97);
ps.println(8.8);
ps.println('a');
ps.println("HelloWorld");
ps.println(true);
ps.close();
2.PrintStream(OutputStream out): 输出的目的地是一个字节输出流
3.PrintStream(File file): 输出的目的地是一个文件
PrintStream ps = new PrintStream(new FileOutputStream("print.txt"));
PrintStream ps2 = new PrintStream(new File("print.txt"));
ps.println("哈哈");
ps2.print(true)
4. System 设置输出位置
System.out.println("我是在控制台输出");
PrintStream ps = new PrintStream("10_IO\\目的地是打印流.txt");
System.setOut(ps); //把输出语句的目的地改变为打印流的目的地
System.out.println("我在打印流的目的地中输出");
ps.close();