博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java基础学习-IO流
阅读量:5093 次
发布时间:2019-06-13

本文共 6052 字,大约阅读时间需要 20 分钟。

  • 1.概念
    • IO流用来处理设备之间的数据传输
    • Java对数据的操作是通过流的方式
    • Java用于操作流的类都在IO包中
    • 流按流向分为两种:输入流,输出流。
    • 流按操作类型分为两种:
      • 字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
      • 字符流 : 字符流只能操作纯字符数据,比较方便。

  对于文件内容的操作主要分为两大类,其中,字符流有两个抽象类:Writer   Reader.

  其对应子类FileWriter和FileReader可实现文件的读写操作

  BufferedWriter和BufferedReader能够提供缓冲区功能,用以提高效率

 

  同样,字节流也有两个抽象类:InputStream   OutputStream

  其对应子类有FileInputStream和FileOutputStream实现文件读写

  BufferedInputStream和BufferedOutputStream提供缓冲区功能

 

 

字符流

  • 字符流的写入

1 import java.io.File; 2 import java.io.FileWriter; 3 import java.io.IOException; 4   5 public class Demo { 6     public static void main(String[] args ) { 7           8         //创建要操作的文件路径和名称 9         //其中,File.separator表示系统相关的分隔符,Linux下为:/  Windows下为:\\10         String path = File.separator + "home" + File.separator + "siu" +11                       File.separator + "work" + File.separator + "demo.txt";12      13         //由于IO操作会抛出异常,因此在try语句块的外部定义FileWriter的引用14         FileWriter w = null;15         try {16             //以path为路径创建一个新的FileWriter对象17             //如果需要追加数据,而不是覆盖,则使用FileWriter(path,true)构造方法18             w = new FileWriter(path);19              20             //将字符串写入到流中,\r\n表示换行想有好的21             w.write("Nerxious is a good boy\r\n");22             //如果想马上看到写入效果,则需要调用w.flush()方法23             w.flush();24         } catch (IOException e) {25             e.printStackTrace();26         } finally {27             //如果前面发生异常,那么是无法产生w对象的28             //因此要做出判断,以免发生空指针异常29             if(w != null) {30                 try {31                     //关闭流资源,需要再次捕捉异常32                     w.close();33                 } catch (IOException e) {34                     e.printStackTrace();35                 }36             }37         }38     }39 }
  • 利用字符流的缓冲区来进行文本文件的复制

1 import java.io.BufferedReader; 2 import java.io.BufferedWriter; 3 import java.io.File; 4 import java.io.FileReader; 5 import java.io.FileWriter; 6 import java.io.IOException; 7   8 public class Demo { 9     public static void main(String[] args ) {10          11         String doc = File.separator + "home" + File.separator + "siu" +12                       File.separator + "work" + File.separator + "demo.txt";13          14         String copy = File.separator + "home" + File.separator + "siu" +15                      File.separator + "life" + File.separator + "lrc.txt";16  17         FileReader r = null;18         FileWriter w = null;19         //创建缓冲区的引用20         BufferedReader br = null;21         BufferedWriter bw = null;22         try {23             r = new FileReader(doc);24             w = new FileWriter(copy);25             //创建缓冲区对象26             //将需要提高效率的FileReader和FileWriter对象放入其构造函数内27             //当然,也可以使用匿名对象的方式 br = new BufferedReader(new FileReader(doc));28             br = new BufferedReader(r);29             bw = new BufferedWriter(w);30              31             String line = null;32             //读取行,直到返回null33             //readLine()方法只返回换行符之前的数据34             while((line = br.readLine()) != null) {35                 //使用BufferWriter对象的写入方法36                 bw.write(line);37                 //写完文件内容之后换行38                 //newLine()方法依据平台而定39                 //windows下的换行是\r\n40                 //Linux下则是\n41                 bw.newLine();42             }      43              44         } catch (IOException e) {45             e.printStackTrace();46         } finally {47             //此处不再需要捕捉FileReader和FileWriter对象的异常48             //关闭缓冲区就是关闭缓冲区中的流对象49             if(br != null) {50                 try {51                     r.close();52                 } catch (IOException e) {53                     e.printStackTrace();54                 }55             }56             if(bw != null) {57                 try {58                     bw.close();59                 } catch (IOException e) {60                     e.printStackTrace();61                 }62             }63         }64     }65 }
  • 二进制文件的复制

  • 1 import java.io.File; 2 import java.io.FileInputStream; 3 import java.io.FileOutputStream; 4 import java.io.IOException; 5   6 public class Demo { 7     public static void main(String[] args ) { 8            9         String bin = File.separator + "home" + File.separator + "siu" +10                       File.separator + "work" + File.separator + "一个人生活.mp3";11          12         String copy = File.separator + "home" + File.separator + "siu" +13                       File.separator + "life" + File.separator + "一个人生活.mp3";14          15         FileInputStream i = null;16         FileOutputStream o = null;17          18         try {19             i = new FileInputStream(bin);20             o = new FileOutputStream(copy);21              22             //循环的方式读入写出文件,从而完成复制23             byte[] buf = new byte[1024];24             int temp = 0;25             while((temp = i.read(buf)) != -1) {26                 o.write(buf, 0, temp);27             }28  29         } catch (IOException e) {30             e.printStackTrace();31         } finally {32             if(i != null) {33                 try {34                     i.close();35                 } catch (IOException e) {36                     e.printStackTrace();37                 }38             }39             if(o != null) {40                 try {41                     o.close();42                 } catch (IOException e) {43                     e.printStackTrace();44                 }45             }46         }47     }48 }

     

    • 对象流的操作:

    • 1 public class ObjectInputStream { 2  3     /** 4      * @param args 5      * @throws IOException  6      * @throws ClassNotFoundException  7      * @throws FileNotFoundException  8      * 读取对象,反序列化 9      */10     public static void main(String[] args) throws IOException, ClassNotFoundException {11         ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e.txt"));12         Person p1 = (Person) ois.readObject();13         Person p2 = (Person) ois.readObject();14         System.out.println(p1);15         System.out.println(p2);16         ois.close();17     }18 19 }

       

转载于:https://www.cnblogs.com/soongkun/p/4885498.html

你可能感兴趣的文章
cassandra vs mongo (1)存储引擎
查看>>
[原创]BizTalk 开发系列
查看>>
uva10382
查看>>
Visual Studio基于CMake配置opencv1.0.0、opencv2.2
查看>>
常见编程语言入口特征
查看>>
[Leetcode 94] 72 Binary Tree Inorder Traversal
查看>>
Vue音乐项目笔记(三)
查看>>
遍历Map对象
查看>>
计算剪贴板里仿制的代码行数
查看>>
YTU 2578: 分数减法——结构体
查看>>
MySQL索引背后的数据结构及算法原理
查看>>
面向对象程序设计 作业一
查看>>
POJ 3360 H-Cow Contest
查看>>
#Leetcode# 209. Minimum Size Subarray Sum
查看>>
2019省赛训练组队赛4.11周四 2014浙江省赛
查看>>
HDU 2084 数塔
查看>>
android 界面切换【转】
查看>>
JavaScript我学之七数组
查看>>
BETA冲刺(6/7)
查看>>
Poj(2679),SPFA,邻接表(主流写法)
查看>>