黑马程序员__IO流笔记一
来源:互联网 发布:怎么能在淘宝上买东西 编辑:程序博客网 时间:2024/05/17 01:22
----------------------android培训、java培训、期待与您交流! ----------------------
IO 用来处理设备之间的数据传输
持久化存储指断电话数据还在
硬盘处理数据慢:寻道
内存处理数据快:寻址
只要是操作字符数据,应该优先使用字符流(字节流+编码表)
字节流的抽象基类 InputStream输入流(读) OutputStream输出流(写)
字符流的抽象基类 Reader输入流(读) Writer输出流(写)
技巧:流体系的子类对象们,都以自己所属体系作为子类后缀名,以功能名称作为前缀名。
比如AudioInputStream音频输入流
字符流
// 写入硬盘可能发生的异常和处理办法
FileWriter fw = new FileWriter("Z:\\demo.txt",true);
// Z盘根本不存在,会发生异常
// 如果当前目录下有同名文件,该文件会被覆盖
// 如果布尔型为真,则续写,否则覆盖
fw.write("abc" + System.getProperty("line.separator") +"de");
// 文件已经写满,会发生异常
fw.close();
// close方法包含了刷新缓冲区的方法flush();
// 为什么还要用flush呢,是为了防止边读边写的时候,假如电源断电,目的地什么都没有
// 可能产生的异常:windows底层关闭失败
// 资源必须得关闭,就得放在finally代码块中
FileReader fr = new FileReader("demo.txt");
char[] buf =newchar[1024];
int len = 0;
while ((len = fr.read(buf)) != -1) {
System.out.println(new String(buf, 0, len));
}
// 如果直接是fr.read();那么返回的int表示的是字符的ASCII码
// 如果读取的是字符数组,既fr.read(buf);那么返回的int是表示读取字符的个数
// 可以用(IOException e)日志文件记录发生的异常e.printStackTrace();
字符串缓冲区对应类BufferedWriter BufferedReader
该类提供了newLine()方法获取行分隔符
其实就是封装了System.getproperty("line.separator");
缓冲区的关闭其实就是在关闭流
// BufferedReader用法示例
FileReader fr = new FileReader("tempfile\\buf.txt");
BufferedReader br = new BufferedReader(fr);
String line = null;
while ((line = br.readLine()) !=null) {
System.out.println(line);
}
br.close();
关于装饰设计模式:装饰设计模式就是对原有对象进行功能和职责的增强。装饰类和被装饰类必须属于同一个体系。而虽然通过继承也能解决问题,但是继承会使体系变得臃肿,所以它比继承更为灵活。
例子
通过继承方式:
Writer
|--TextWriter
|--BufferedTextWriter
|--MediaWriter
|--BufferedMediaWrite
通过装饰设计模式
class BufferedWriterextends Writer{
private Writer w;
BufferedWriter(Writer w)
{
this.w = w;
}
}
Writer
|--TextWriter
|--MediaWriter
|--BufferedWriter //装饰类。
BufferedReader的子类LineNumberReader有设置和获取行号功能。
字节流
用字节流演示复制媒体文件
FileInputStream fis = new FileInputStream("1.jpg");
FileOutputStream fos = new FileOutputStream("tempfile\\1.jpg");
byte[] buf =newbyte[1024]; //自定义缓冲区数组的方式。
// byte[]buf = new byte[fis.available()];
//available()方法可以获得文件大小,但是复制文件的时候慎用,因为一下子就要开辟这么大空间,一般只用来获得文件大小
int len;
while ((len = fis.read(buf)) != -1) {
fos.write(buf, 0, len);
}
fis.close();
fos.close();
转换流
// 字节流读
FileInputStream fis = new FileInputStream("tempfile//test.txt");
// 字节流作为参数,转换成字符流。InputStreamReader将读到的字节解码为字符
InputStreamReader isr = new InputStreamReader(fis);
// 字节流关联的数据都是文本数据时,简化的复制文件的方式
// 如果需要从键盘读入(InputStream)或者显示在屏幕(PrintStream),可以把路径改成System.in或者
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream("tempfile\\test.txt")));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("tempfile\\purpose.txt")));
String line = null;
while ((line = br.readLine()) !=null) {
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
流操作规律总结:
1. 明确具体体系-à字符流还是字节流
2. 明确是读还是写。读:InputStream Reader;
写:OutputStream Writer
3. 确定数据所在具体设备,既确定具体流对象。比如是用前缀名是File的流对象。还是要从键盘输入System.in或者显示在屏幕上System.out。还是在内存中(数组:StringByteArrayCharArray)。还是到网络上Socket。
4. 明确具体对象后,一定要继续明确是否需要额外功能。
1高效。Buffered。
2转换编码。InputStreamReader OutputStreamWriter桥梁。
3保证数据值的表示形式。PrintWriter PrintStream。
4是否需要多个源合并一个源,SequenceInputStream。
5是否是操作对象,将对象序列化或者反序列化,ObjectInputStream ObjectOutputStream。
6是否操作基本数据值。DataInputStream DataOutputStream
// 操作流规律应用
//读取一个已有的默认编码的文本文件,想要将这些数据按照指定的编码UTF-8写到另一个文件中。
// 思路:
//文本文件,--->字符流
//有读有写--->Reader和Writer
//数据都在硬盘上--->FileReader和FileWriter。但是目的是指定编码表,所以不能使用FileWriter
//需要编码转换。而且是字符到字节(OutputStreamWriter),并且需要高效。
//该转换流必须要接收一个字节流,而且还要对应的设备是硬盘,所以该对象是FileOutputStream.
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("b.txt"),"UTF-8"));
----------------------android培训、java培训、期待与您交流! ----------------------
- 黑马程序员__IO流笔记一
- 黑马程序员__JAVA基础__IO流(一)
- 黑马程序员__IO流笔记二
- 黑马程序员__IO流
- 黑马程序员__IO流
- 黑马程序员__IO流
- 黑马程序员__IO流
- 黑马程序员__IO流
- 黑马程序员__IO(字节流)
- 黑马程序员__IO流小结
- 黑马程序员__JAVA基础__IO流(二)
- 黑马程序员__JAVA基础__IO流(三)
- 黑马程序员__JAVA基础__IO流(四)
- 黑马程序员__IO(字符流)
- 黑马程序员__IO流(01)
- 黑马程序员__IO流(02)
- 黑马程序员__Day03_java基础__IO流
- 黑马程序员__IO
- WebService 基于axis1.4(二)
- 黑马程序员——day19(1)IO流
- 编程高手—快体现了真正掌握
- 记录点滴21
- eclipse中的汉字极小的解决方案
- 黑马程序员__IO流笔记一
- 数组数据的移动实现实例化:
- web开发名词解释
- 前端工程师新手必读
- 黑马程序员——day19(2)IO流 总结
- Android实现ListView异步加载图片
- Linux 汇编器:对比 GAS 和 NASM
- struct device / device_driver 结构体
- physicsEditor 描轮廓,点数多了好还是少了好呢?