您的位置:首页 > 职场人生

黑马程序员——IO流(1)

2014-10-13 10:21 239 查看
流的概念和作用:

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

Java IO流类图结构:



从上图可以看到,根据处理的数据类型的不同,分为字符流和字节流。字符流的本质是基于字节流,根据指定的码表可以对字符进行高效的流操作。字节流和字符流的区别:

(1)读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。

(2)处理对象不同:字节流处理所有类型的数据(如图片、视频等),而字符流只能处理字符类型的数据。

结论:只有是处理纯文本数据,就优先考虑使用字符流。除此之外都使用字节流。

字符流:

向硬盘写入数据:

import java.io.*;

public class IO_test1 {
public static void main(String[] args) {
FileWriter fw=null;
try {
//构造函数public FileWriter(String fileName, boolean append)
//append - 一个 boolean 值,如果为 true,则将数据写入文件末尾处,而不是写入文件开始处。 即文件的续写
fw=new FileWriter("c:\\test.txt",true);
fw.write("abcdefg");
//flush()刷新流
fw.flush();
//续写
fw.write("hello!");
fw.flush();
} catch (IOException e) {
e.printStackTrace();
}finally{
//close()关闭流,并刷新,即flush
try {
if(fw!=null)
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}


向硬盘读取数据:

import java.io.*;

public class IO_test2 {
public static void main(String[] args) {
try {
FileReader fr=new FileReader("c:\\test.txt");
//读取单个字符,直到末尾
//readOne(fr);
//一次全部读取字符
readOnce(fr);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}

public static void readOne(FileReader fr){
try {
int ch=0;
while((ch=fr.read())!=-1){
System.out.print((char)ch);
}
} catch (IOException e) {
e.printStackTrace();
}
}

public static void readOnce(FileReader fr){
//数组存储字符。因为知道文件大小,所以此处定义成了固定数组
char[] buff=new char[1024];
int num=0;
try {
while((num=fr.read(buff))!=-1){
//将字符数组转成字符串输出
System.out.println(new String(buff,0,num));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

字符流文件的复制:

import java.io.*;

public class IO_test3 {
public static void main(String[] args) {
FileWriter fw=null;
FileReader fr=null;
try {
fr=new FileReader("c:\\test.txt");
fw=new FileWriter("d:\\test1.txt");
char[] buff=new char[100];
int len=0;
while((len=fr.read(buff))!=-1){
fw.write(buff, 0, len);
}
} catch (IOException e) {
throw new RuntimeException("失败");
} finally{
if(fw!=null)
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
if(fr!=null)
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}

}

}

其实,文件的复制就是一边读一边写,从上边的代码中就可以看出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: