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

来源:互联网 发布:淘宝中国质造质量 编辑:程序博客网 时间:2024/05/05 02:38

----------- 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 blocke.printStackTrace();}if (bw != null)try {//关闭流用以释放底层资源bw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

输出结果:



----------- android培训java培训java学习型技术博客、期待与您交流! ------------

0 0
原创粉丝点击