传智博客JAVA基础第二十三天

来源:互联网 发布:安卓导航栏源码 编辑:程序博客网 时间:2024/05/26 22:59
1:流的操作规律
A:明确数据源和数据目的
数据源:InputStream,Reader
数据目的:OutputStream,Writer
B:明确数据的内容是否是纯文本
是:
数据源:Reader
数据目的:Writer
不是:
数据源:InputStream
数据目的:OutputStream

C:明确具体设备
数据源:键盘录入(System.in),数组或者内存,硬盘文件
数据目的:控制台显示(System.out),数组或者内存,硬盘文件

如果字节流想使用字符流的操作方式,可以采用转换流。

D:明确是否需要提高效率
是:用带Buffer的流对象
不是:不带Buffer的流对象

分析如下四种操作:
 文本--文本
 文本--控制台
 键盘录入--文本
 键盘录入--控制台

2:打印流(重点)
(1)打印流也是可以直接操作设备的流。也就是说它可以直接对文件进行读写操作。
如何区分流是否能够对文件直接进行读写呢?
看其构造方法中是否有String或者File类型的参数用于指定文件。
(2)打印流的特点
分类:PrintStream,PrintWriter
A:能够打印任意类型的数据
B:能够启动自动刷新功能
(3)用打印流改写键盘录入数据写入文件
//用缓冲流读写
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

String line = null;
while((line=br.readLine())!=null)
{
if("over".equals(line))
{
break;
}
bw.write(line);
bw.newLine();
bw.flush();
}

bw.close();
br.close();

//用打印流改进
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw = new PrintWriter(System.out,true);

String line = null;
while((line=br.readLine())!=null)
{
if("over".equals(line))
{
break;
}
pw.println(line);
}

pw.close();
br.close();

(4)用打印流复制文本文件
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)
{
//write,print,println
pw.println(line);
}

pw.close();
br.close();

3:对象流
(1)为了把对象进行存储,方便下次使用。java提供了对象流对其进行操作。
(2)要把一个对象进行写入操作,必须让该对象实现序列化接口。
序列化接口没有抽象方法的,可以看成是一个标识接口。
(3)对象的基本读写代码
//李小龙,李连杰,甄子丹,吴京
Student s = new Student("甄子丹",20);

//写数据
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("oos.txt"));
oos.writeObject(s);
oos.close();

//读取数据
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("oos.txt"))
Student s = (Student)oos.readObject();
ois.close();

System.out.println(s.getName()+"***"+s.getAge());
(4)一般我们把对象实现序列化接口后,会给其生成一个序列化编号。

4:Properties
(1)可以和IO结合的Map集合对象。
(2)Properties里面的特殊方法
A:list 把数据打印到文件中
B:load 把数据加载到Properties对象中
C:store 把Properties对象中的数据保存到文件中

练习:
A:把指定目录下的所有java文件结尾的文件的路径写入到一个文本文件中
B:统计应用程序的执行次数

5:设备是内存的流对象(重点)
(1)ByteArrayInputStream,ByteArrayOutputStream
(2)CharArrayReader,CharArrayWriter
(3)StringReader,StringWriter

6:编码问题(重点)
(1)编码表的由来
(2)常见的编码表
A:ASCII码表
B:ISO-8859-1
C:gb2312,GBK
D:UTF-8 (是unicode的一种实现)
(3)转换流在编码中应用
字符流 = 字节流 + 编码表
(4)字符串在编码中应用
编码:String -- byte[]
解码:byte[] -- String
要能够分析出GBK和UTF-8进行编解码出现乱码的问题。

原创粉丝点击