内存操作流: 把数据写入到内存中,完成数据的临时存储, 可以使用对应的流对象从内存中读取数据
a:操作字节数组
ByteArrayOutputStream
ByteArrayInputStream
b:操作字符数组
CharArrayWriter
CharArrayReader
c:操作字符串
StringWriter
StringReader
写数据:
ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
bos.write("我爱您刘亦菲".getBytes()) ;
// 获取数据
byte[] bytes = bos.toByteArray() ;
// String str = bos.toString() ;
// System.out.println(str);
ByteArrayInputStream bis = new ByteArrayInputStream(bytes) ;
byte[] bytes = new byte[1024] ;
int len = 0 ;
while((len = bis.read(bytes)) != -1){
System.out.println(new String(bytes , 0 , len)) ;
}
打印流:
字节打印流 PrintStream
字符打印流 PrintWriter
打印流的特点:
只有输出端,没有输入端
可以操作任意的数据类
如果启动的自动刷新可以完成自动刷新
可以操作文件的流
指的是构造方法可以直接接受文件或者文件对应的路径
那些流是操作文件流:
FileInputStream
FileOutputStream
FileReader
FileWriter
PrintStream
PrintWriter
作为Writer的子类使用
// public void write(int ch) : 一次写一个字符
// public void write(char[] ch) : 一次写一个字符数组
// public void write(char[] ch , int offset , int length) : 一次写一个字符数组中的一部分
// public void write(String str) : 一次写一个字符串
// public void write(String str , int offset , int length) : 一次写一个字符串中的一部分
启动自动刷新:
public PrintWriter(Writer out, boolean autoFlush)
public PrintWriter(OutputStream out, boolean autoFlush)
如果启用了自动刷新,则只有在调用 println、printf 或 format 的其中一个方法时才可能完成此操作,而不是每当正好输出换行符时才完成。
println方法在启动了自动刷新以后可以分为
写一个字符串
刷新
换行
使用打印流复制文件:
BufferedReader br = new BufferedReader(new FileReader("a.txt")) ;
PrintWriter bw = new PrintWriter(new FileWriter("b.txt") , true) ;
String line = null ;
while((line = br.readLine()) != null){
bw.println(line);
}
bw.close() ;
br.close() ;
键盘录入的方式:
a: 使用main方法进行键盘录入
b: 使用Scanner进行键盘录入
c: BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) ;
String line = br.readLine() ;
System.out.println(line);
对标准输出流进行包装
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)) ;
bw.write("中国") ;
bw.flush() ;
bw.close() ;
序列化流于反序列化流
所谓的序列化就是把对象通过流的方式存储到文件中.
反序列化就是把文件中存储的对象以流的方式还原成对象
ObjectInputStream和ObjectOutputStream
ObjectOutputStream 是序列化流: 可以把一个对象写入到文件中,这个对象对应的类要实现Serializable接口
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.txt")) ;
Student s = new Student("刘亦菲" , 24) ;
oos.writeObject(s) ;
oos.close() ;
ObjectInputStream 反序列化: 可以把文件中存储的对象以流的方式读取到程序中
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("a.txt")) ;
Object object = ois.readObject() ;
System.out.println(object);
java.io.EOFException: 因为对应的文件中没有数据
使用transient关键字声明不需要序列化的成员变量
Properties的父类的是Hashtable属于双列集合, 可以和IO流进行配合使用
属性列表中每个键及其对应值都是一个字符串。
public Object setProperty(String key,String value): 添加元素
public String getProperty(String key): 根据键获取值
public Set<String> stringPropertyNames(): 获取所有的键的Set集合
public void load(Reader reader): 把文件中的数据通过IO流加载到对应的Properties中
public void store(Writer writer,String comments): 把Properties中的数据通过IO流存储到文件中, comments: 表示的注释的意思
在properties作为配置文件的时候使用的注释是以: # 开始 |
|