1:数据操做流(操做基本类型数据的流)(理解)面试
(1)数据操做流:数组
能够读写基本类型的数据。
(2)流对象名称
网络
数据输入流:DataInputStream
DataInputStream(InputStream in)
数据输出流:DataOutputStream
DataOutputStream(OutputStream out)dom
2:内存操做流(理解)
(1)内存操做流:优化
用于处理临时存储信息的,程序结束,数据就从内存中消失。ui
(2)如下:url
字节数组:
ByteArrayInputStream
ByteArrayOutputStream
字符数组:
CharArrayReader
CharArrayWriter
字符串:
StringReader
StringWriterspa
注意:释放资源
经过查看源码咱们知道这里什么都没作,因此根本不须要close()。指针
3:打印流(掌握)
(1)打印流:code
字节打印流---PrintStream
字符打印流---PrintWriter
(2)特色:
1:只有写数据的,没有读取数据。只操做目的地,不操做数据源。
2:能够操做任意类型的数据。
3:若是启用了自动刷新(构造方法中第二参数为true,即开启自动刷新)。
在调用println()方法的时候,可以换行并刷新
println() --->
其实等价于于:
{ bw.write();
bw.newLine();
bw.flush(); }
4:能够直接操做文件
问题:哪些流能够直接操做文件呢?
看API,若是其构造方法可以同时接收File和String类型的参数,通常都是能够直接操做文件的。
流:
基本流:就是可以直接读写文件的。
高级流:在基本流基础上提供了一些其余的功能。
(3)复制文本文件
BufferedReader br = new BufferedReader(new FileReader("a.txt")); PrintWriter pw = new PrintWriter(new FileWriter("b.txt"),true); String line = null; while((line=br.readLine())!=null) { pw.println(line); } pw.close(); br.close();
4:标准输入输出流(理解)
(1)输入输出流:
System类下面有这样的两个字段
in 标准输入流
out 标准输出流
System类中的两个成员变量:
public static final InputStream in “标准”输入流。
public static final PrintStream out “标准”输出流。
InputStream is = System.in;
PrintStream ps = System.out;
(2)三种键盘录入方式
1:main方法的args接收参数
2:System.in经过字符缓冲流包装标准输入流实现
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
3:Scanner
Scanner sc = new Scanner(System.in);
(3)输出语句的原理和如何使用字符流输出数据
A:原理
System.out.println("helloworld"); PrintStream ps = System.out; ps.println("helloworld");
B:把System.out用字符缓冲流包装一下使用
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
5:随机访问流(理解)
(1)随机访问流:
能够按照文件指针的位置写数据和读数据。
RandomAccessFile类不属于流,是Object类的子类。
但它融合了InputStream和OutputStream的功能。
支持对文件的随机访问读取和写入。
(2)特色:
public RandomAccessFile(String name,String mode):第一个参数是文件路径,第二个参数是操做文件的模式。
模式有四种,咱们最经常使用的一种叫"rw",这种方式表示我既能够写数据,也能够读取数据。
6:合并流(理解)
(1)合并流:
把多个输入流的数据写到一个输出流中。
(2)构造方法:
A:SequenceInputStream(InputStream s1, InputStream s2)
B:SequenceInputStream(Enumeration<? extends InputStream> e)
7:序列化流(理解)
(1)序列化流:
能够把对象写入文本文件或者在网络中传输。
序列化流:把对象按照流同样的方式存入文本文件或者在网络中传输。 对象 -- 流数据(ObjectOutputStream)
反序列化流:把文本文件中的流对象数据或者网络中的流对象数据还原成对象。 流数据 -- 对象(ObjectInputStream)
(2)如何实现序列化呢?
让被序列化的对象所属类实现序列化接口。
该接口是一个标记接口。没有功能须要实现。
(3)注意问题:
把数据写到文件后,在去修改类会产生一个问题。
如何解决该问题呢?
在类文件中,给出一个固定的序列化id值。
并且,这样也能够解决黄色警告线问题。
(4)面试题:
8:Properties(理解)
(1)Properties
1.Properties:属性集合类。是一个可以和IO流相结合使用的集合类。
2.Properties 可保存在流中或从流中加载。属性列表中每一个键及其对应值都是一个字符串。
3.是Hashtable的子类,说明是一个Map集合。
(2)特有功能
A:public Object setProperty(String key,String value)添加元素 B:public String getProperty(String key)获取元素 C:public Set<String> stringPropertyNames()获取全部的键的集合
(3)和IO流结合的方法
//把键值对形式的文本文件内容加载到集合中 public void load(Reader reader) public void load(InputStream inStream) //把集合中的数据存储到文本文件中 public void store(Writer writer,String comments) public void store(OutputStream out,String comments)
(4)案例:
A:根据给定的文件判断是否有键为"lisi"的,若是有就修改其值为100
B:写一个程序实现控制猜数字小游戏程序不能玩超过5次
9:NIO(了解)
(1)New IO:
JDK4出现的NIO,对之前的IO操做进行了优化,提供了效率。可是大部分咱们看到的仍是之前的IO
(2)JDK7的NIO的使用
Path:路径
Paths:经过静态方法返回一个路径
Files:提供了常见的功能
复制文本文件
把集合中的数据写到文本文件