05 输入输出(IO)
2016-05-07 20:34
274 查看
五、输入输出(IO)
1.IO流
IO流用来处理设备之间的 数据传输Java对数据的操作是通过 流 的方式
Java用于操作流的对象都在 IO包 中
流按操作数据分为两种: 字节流 与 字符流
流按流向分为: 输入流 , 输出流
IO流常用基类
字节流 的抽象基类:
InputStream,
OutputStream
字符流 的抽象基类:
Reader,
Writer
注:由这四个类派生出来的子类名称都是
以其父类名作为子类名的后缀。
• 如:
InputStream的子类
FileInputStream。
• 如:
Reader的子类
FileReader
IO程序的书写
导入 IO包中的类
进行IO 异常处理
在finally中对流进行 关闭
2.字符流
字符流——创建文件创建流对象,建立数据存放文件
FileWriter fw = new FileWriter(“Test.txt”);
调用流对象的写入方法,将数据写入流
fw.write(“text”);
关闭流资源,并将流中的数据清空到文件中。
fw.close();
FileWriter fw = null; try{ fw = new FileWriter("Test.txt"); fw.write("text"); }catch(IOException e){ System.out.println(e.toString()); }finally{ if(fw != null) try{ fw.close(); }catch(IOException e){ System.out.println(e.toString()); } }
字符流——读取文件
建立一个流对象,将已存在的一个文件加载进流。
FileReader fr = new FileReader(“Test.txt”);
创建一个临时存放数据的数组。
char[] ch = new char[1024];
调用流对象的读取方法将流中的数据读入到数组中。
int len = fr.read(ch);
FileReader fr = null ; try { fr = new FileReader("c:\\test.txt"); char [] buf = new char[1024]; int len= 0; while ((len=fr.read(buf))!=-1){ System.out.println(new String(buf,0,len)); } } catch (IOException e){ System.out.println("read-Exception:"+e.toString()); } finally{ if(fr!=null){ try { fr.close(); } catch (IOException e){ System.out.println("close-Exception:"+e.toString()); } } }
定义文件路径时,可以用“ / ”或者“ \ ”。
在创建一个文件时,如果目录下有同名文件将被 覆盖 。
在读取文件时,必须保证该文件已存在,否则出 异常 。
3.字符流的缓冲区
缓冲区的出现提高了对数据的读写效率。对应类
• BufferedWriter
• BufferedReader
缓冲区要结合流才可以使用
在流的基础上对流的功能进行了增强
4.装饰设计模式
对原有类进行了功能的 改变 , 增强 。装饰模式的基本格式。
它与继承有什么不同?
了解BufferedReader的原理。
5.字节流
基本操作与字符流类相同但它不仅可以操作字符,还可以操作其他 媒体文件
字节流的缓冲区
同样是 提高 了字节流的 读写效率
6.转换流
InputStreamReader,
OutputStreamWriter
转换流的 由来
字符流与字节流之间的 桥梁
方便了字符流与字节流之间的 操作
转换流的 应用
字节流中的数据都是字符时,转成字符流操作更高效
有关编码问题时候
7.标准输入输出流
System类中的字段: in , out 。它们各代表了系统标准的 输入 和 输出 设备。
默认输入设备是 键盘 ,输出设备是 显示器 。
System.in 的类型是 InputStream .
System.out 的类型是 PrintStream 是OutputStream的子类FilterOutputStream 的子类.
8.流的基本应用小节
流是用来处理数据的。处理数据时,一定要 先明确数据源 ,与 数据目的地 (数据汇)。
数据源可以是文件,可以是键盘。
数据目的地可以是文件、显示器或者其他设备。
而流只是在帮助数据进行传输,并对传输的数据进行处理,比如过滤处理.转换处理等。
9.File类
用来将 文件 或者 文件夹 封装成 对象方便对文件与文件夹的 属性信息 进行 操作
File对象可以作为参数 传递给流 的构造函数。
了解File类中的常用方法。
10.IO包中的其他类
1)RandomAccessFile
随机访问文件,自身具备读写的方法。通过skipBytes(int x),seek(int x)来达到随机访问。
2)管道流
PipedInputStream和
PipedOutputStream
输入输出可以直接进行连接,通过结合线程使用。
3)打印流
• PrintWriter 与 PrintStream• 可以直接操作输出流和文件。
4)序列流
• SequenceInputStream• 对多个流进行合并。
5)操作对象
• ObjectInputStream 与 ObjectOutputStream• 被操作的对象需要实现 Serializable (标记接口)
6)操作基本数据类型
• DataInputStream 与 DataOutputStream
7)操作字节数组
• ByteArrayInputStream 与 ByteArrayOutputStream
8)操作字符数组
• CharArrayReader 与 CharArrayWrite
9)操作字符串
• StringReader 与 StringWriter
11.字符编码
字符流 的出现为了方便操作 字符 。更重要是的加入了 编码转换 。
通过子类 转换流 来完成。
• InputStreamReader
• OutputStreamWriter
在两个对象进行构造的时候可以加入字符集。
常见的编码表
ASCII :美国标准信息交换码。
• 用一个字节的7位可以表示。
ISO8859-1 :拉丁码表。欧洲码表
• 用一个字节的8位表示。
GB2312 :中国的中文编码表。
GBK :中国的中文编码表升级,融合了更多的中文文字符号。
Unicode :国际标准码,融合了多种文字。
• 所有文字都用两个字节来表示, Java语言使用的就是unicode
UTF-8 :最多用三个字节来表示一个字符
转换流的编码应用
可以将字符以指定编码格式 存储 。
可以对文本数据指定编码格式来 解读 。
指定编码表的动作由 构造函数 完成
字符编码
编码:字符串–>字节数组
解码:字节数组–>字符串
相关文章推荐
- bzoj2152
- 设计模式--观察者模式初探和java Observable模式
- 共同学习Java源代码--数据结构--AbstractCollection抽象类(一)
- PAT (Advanced Level) L1-6. 连续因子 for循环暴力
- Web前端性能优化(一)减少Http请求
- android 6.0 SDK中删除HttpClient的相关类的解决方法
- Servlet的HttpServletResponse输出
- 【VS开发】关于内存泄漏的调试
- Tarjan算法求至少要添加几条边才能使无向连通图变为边双连通图。
- 04 Java API
- jQuery操作元素内容的相关方法
- Unable to connect to your virtual device!解决方法
- C语言代码行数分类统计小程序(源代码)
- codeforcs 350 C. Cinema
- Java集合框架
- Studio开发前设置 ,个人习惯性配置,不喜勿怪
- bzoj1468
- ACMer之路开启
- STL学习——hash_set/hash_map/hash_multiset/hash_multimap篇
- setTimeout 的黑魔法