文件拷贝: 数据源 --程序-- 目的地
- //1.选择流
- 输入流 InputStream is=new FileInputStream(“D:/test.txt”);
- 输出流 OutputStream os=new FileOutputStream(“E:/test.txt”);
- //2.准备卡车
- byte[] car=new byte[1024];
- //3.读入写出
- int len=-1; //读入到小卡车中数据的个数
- while((len=is.read(car))!=-1){
-
os.write(car,0,len);
- }
- //4.刷出
- os.flush();
- //5.关闭 先打开的后关闭
- os.close();
- is.close();
==========================================================================================
- 字符流 :只能操作纯文本的内容 .txt .html 节点流 字符流
- Reader 字符输入流 抽象类 FileReader 输入流
-
read()| read(char[]) + close()
- Writer 字符输出流 抽象类 FileWriter 输出流
public class CharDemo01 {
public static void main(String[] args) throws IOException {
//1.选择流
Reader read=new FileReader(“D:/hehe.txt”);
//2.准备卡车
char[] car=new char[1024];
//3.读入
// System.out.println((char)(read.read()));
int len=-1;
while((len=read.read(car))!=-1){
System.out.println(new String(car,0,len));
}
//4.关闭
read.close();
}
}
Writer 字符输出流 抽象类 FileWriter 输出流
-
FileWriter write() | write(char[]) | append() +flush() + close()
*/
public class CharDemo02 {
public static void main(String[] args){
//1.选择流
Writer write=null;
try {
write=new FileWriter(“D:/heihei.txt”); //追加
//2.准备数据
String str=“千千阙歌”;
char[] arr={‘尚’,‘学’,‘堂’};
//3.写出
write.append(str);
write.write(arr);
//4.刷出
write.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
if(write!=null){
try {
write.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
==========================================================================================
/*
- 功能流的一种:
- 缓冲流:增强功能,提高性能
- 使用:功能流(节点流)
- 字节缓冲流:
-
字节输入缓冲流 BufferedInputStream
-
字节输出缓冲流 BufferedOutputStream
-
无新增方法,可以发生多态
*/
package com.shsxt.buffered;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class BufferedInputStreamDemo {
public static void main(String[] args) {
//1.选择流
InputStream is=null;
OutputStream os=null;
try {
is=new BufferedInputStream(new FileInputStream(“D:/test.txt”));
os=new BufferedOutputStream(new FileOutputStream(“E:/dest.txt”));
//2.准备卡车
byte[] car=new byte[1024];
//3.读入写出
int len=-1; //读入到小卡车中数据的个数
while((len=is.read(car))!=-1){
os.write(car,0,len);
}
//4.刷出
os.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
//5.关闭 先打开的后关闭
try {
//多行添加try…catch=>alt+shift+z
if(os!=null){
os.close();
}
if(is!=null){
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
字符缓冲流
- BufferedReader 新增方法 readLine() 读取一行
- BufferedWriter 新增方法 newLine() 写出换行符
- 不能发生多态,因为父类引用对子类新增方法不可见
转换流(了解)
- 可以把字节流转为字符流使用
- InputStreamReader(InputStream,String charset)
- OutputSteamWriter(OutputSteam,String charset)
- 可能出现乱码的情况:
-
1.字符编码格式不统一
-
2.缺少字节个数
-
不同编码格式汉字所占字节大小:
-
ISO-8859-1 1个字节
-
GBK 2个字节
-
GB2312 2个字节
-
UTF-8 3个字节
基本数据类型流 :读写带有基本数据类型的数据+String
- 基本数据类型流(字节节点流)
-
DataInputStream(InputStream): 新增方法: readXXX()
-
DataOutputStream(OutputStream): 新增方法: writeXXX()
- EOFException:文件存在,但是内部无法读取,不是源文件
序列化:将对象信息转为可存储或者可传输的信息格式
- 对象流:
- 序列化输出流 ObjectOutputStream
- 反序列化输入流 ObjectInputStream
- 新增方法 readXxx() writeXxx()
- 先序列化后反序列化
- 不是所有的类都能序列化 实现一个空接口 java.io.Serializable
- 不是所有的属性都需要序列化 transient
- 静态的内容不能被序列化 默认值
- 如果父类实现了Serializable,子类中所有的内容都可以序列化
- 如果子类实现Serializable,父类中的内容没有序列化能力,只有子类的内容有