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

黑马程序员--Java基础--09IO(一)

2014-03-13 13:55 357 查看
----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

Java中的流

    Io流用来处理设备之间的数据传输

  Java对数据的操作是通过流的方式

    Java用于操作流的对象都在io包里



流的分类

流分为输入流和输出流

输入流包含字节输入流和字符输入流

输出流包含字节输出流和字符输出流



Io流常用基类:

字节流的抽象基类:InputStream,OutputStream。                 

字符流的抽象基类:Reader,Writer。

注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。

 

 

例子1

    向硬盘中的文件写入内容,因写入的内容为全部为文本格式的字符,因此选用字符输出流实现,代码如下:

public class IoTest {
public static void main(String[] args) {
FileWriter fw = null;   //创建字符输出流对象
FileWriter fw1 = null;
try {
//使输出流对象与硬盘中的文件相关联
fw = new FileWriter("j:\\aa.txt");
//使输出流对象与硬盘中的文件相关联,true表示续写内容
fw1 = new FileWriter("j:\\aa.txt", true);
//调用write方法向文件中写入内容
fw.write("asasfadfda");
//刷新操作
fw.flush();
//符号\r\n表示换行
fw1.write("\r\ndadsa\r\ndasdasfa");
fw1.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fw != null)
//关闭流用以释放底层资源
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (fw1 != null)
fw1.close();
} catch (IOException e) {
e.printStackTrace();
}
}

对于写操作来说,当关联到的硬盘文件不存在时,将自动创建相应文件并写入相关内容。

 

例子2

通过字符输入输出流实现文本复制功能,文件复制其实就是频繁的读入写出操作,关键在于对文件类型及流的选择上。

代码如下:

//创建字符输入输出流对象
FileReader fr = null;
FileWriter fw = null;
try {
//使字符输入输出流与文件关联
fr = new FileReader("j://aa.txt");
fw = new FileWriter("j://bb.txt");
//创建字符数组用以存储输入流读取的内容
char[] ch = new char[1024];
int num = 0;
//使用频繁的读取写入操作完成文件复制
while ((num = fr.read(ch)) != -1) {
fw.write(ch, 0, num);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fr != null)
//关闭流用以释放底层资源
fr.close();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
if (fw != null)
//关闭流用以释放底层资源
fw.close();
} catch (IOException e) {
e.printStackTrace();
}

}

例子3

完成硬盘中图片文件的复制操作,因图片文件为字节文件,因此选用字节流操作,同样是频繁的读入写出操作,代码如下:

//创建字节输入输出流对象
FileInputStream fr = null;
FileOutputStream fw = null;
try {
//使字节输入输出流与文件关联
fr = new FileInputStream(new File("J://1.bmp"));
fw = new FileOutputStream(new File("J://2.bmp"));
//创建字节数组用以存储输入流读取的内容
byte[] buf = new byte[1024];
int len = 0;
//使用频繁的读取写入操作完成文件复制
while ((len = fr.read(buf)) != -1) {
fw.write(buf, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fr != null)
try {
//关闭流用以释放底层资源
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
if (fw != null)
try {
//关闭流用以释放底层资源
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}


缓冲区

缓冲区的出现是为了提高流的操作效率而出现的。

所以在创建缓冲区之前,必须要先有流对象。

该缓冲区中提供了一个跨平台的换行符,newLine();



例子:

// 创建字符输入输出缓冲流对象
BufferedReader br = null;
BufferedWriter bw = null;
try {
//InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。
//它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
//建立输入缓冲关联文件
br = new BufferedReader(new InputStreamReader(new FileInputStream(
"J://aa.txt")));
// OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset
// 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。
// 因System.out返回的为PrintStream因此使用该流进行转换
// 建立输出缓冲并打印在控制台上
bw = new BufferedWriter(new OutputStreamWriter(System.out));
//字符串用以存储读取的每行内容
String line = null;
while ((line = br.readLine()) != null) {
//向控制台写入
bw.write(line);
//换行符
bw.newLine();
//刷新
bw.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null)
try {
//关闭流用以释放底层资源
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (bw != null)
try {
//关闭流用以释放底层资源
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

输出结果:



----------- android培训java培训、java学习型技术博客、期待与您交流! ------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: