您的位置:首页 > 其它

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 :最多用三个字节来表示一个字符

转换流的编码应用

可以将字符以指定编码格式 存储 。

可以对文本数据指定编码格式来 解读 。

指定编码表的动作由 构造函数 完成

字符编码

编码:字符串–>字节数组

解码:字节数组–>字符串
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: