关闭

Java之IO流操作

369人阅读 评论(0) 收藏 举报

http://blog.csdn.net/xiang_j2ee/article/details/6792572


通过全面几期对Android的入门级了解,感知若要想学好Android,不单单需要对Android运行机制和开发技巧融会贯通,Java基础也是必不可少的,由于工作上比较少用到IO流这块,之前接触的一点点也忘记了,所以近期很有必要花点时间复习了一下,下面对其做些总结。

       我认为:IO流在整个Java体系中其开发包是比较复杂的,也是一个难点,想要跨过此道门槛,必须要对面向对象的概念非常熟悉,而且要对抽象类非常了解。引用李老师的话,IO流的核心是:根据实例化子类的不同,完成的功能也不同。其实就是多态。

       1、File类

       File类是与文件操作有关的类,如创建、删除等操作。其构造方法是public File(String pathname),可以看出,若要生成一个File对象,必须指定路径,看下图代码:

       需要注意的是:不同操作系统路径之间的斜杠也不同,如windows系统是\\,而liunx是//,为了更好的跨平台,此处最好使用file类提供的API,file.separator,它会自动判断当前机子是属于哪类操作系统,从而动态的返回斜杠。至于还有很多有关file类的操作,我们可以根据文档来合理的使用,如:file.isFile();//判断是否是文件,file.isDirectory();//判断是否是目录等等。

       下面来看个有关File操作范例:列出一个指定文件夹中的所有内容。

 

想要显示其路径则可以使用file.listFiles();

 

       2、字节流和字符流

       通过上来的例子可以知道,File只是与文件有关的操作,其并不能对文件的内容进行操作,如果要对文件内容进行操作,就需要通过使用字节流和字符流来完成,但不管是哪一种操作,都有其固定的操作顺序:

       ·使用File类找到文件

       ·通过字节流或字符流的子类进行对象的实例化

       ·进行读、写操作

       ·关闭字节流或字符流

       

       注意:由于流是属于资源性的操作,所以一定要通过关闭来释放资源。

       操作流有以下几个:字节流 InputStream OutputStream     字符流 Writer Reader

      

       2.1、字节输出流(OutputStream)

   此类定义如下:public abstract class OutputStream extends Object implements Closeable, Flushable

       由于是个抽象类,根据面向对象的概念,必须由子类对其进行实例化操作。其方法如下:

 

 void close()  关闭此输出流并释放与此流有关的所有系统资源。
 void flush()  刷新此输出流并强制写出所有缓冲的输出字节。
 void write(byte[] b)b.length 个字节从指定的字节数组写入此输出流。
 void write(byte[] b, int off, int len)  将指定字节数组中从偏移量off 开始的len 个字节写入此输出流。
abstract  void write(int b)  将指定的字节写入此输出流。

      下面范例使用OutputStream向路径D:\file\test.txt输出Hello World!!!

            此代码每执行一次都会覆盖掉之前的内容,如果不想将其覆盖掉,则在实例化时候可以调用另外一个构造方法

new FileOutputStream(file,true)即可。若要换行则可以在字符串中输入\r\n,形如:“\r\nHello World!!!”,试试看。

 

       2.2、字节输入流(InputStream)

       此类定义如下:public abstract class InputStream extendsObject implementsCloseable

       显然,它也需要通过子类对其进行实例化操作,其常用操作方法有:

abstract  int read()  从输入流读取下一个数据字节。
 int read(byte[] b)  从输入流中读取一定数量的字节并将其存储在缓冲区数组b 中。
 int read(byte[] b, int off, int len) 将输入流中最多len 个数据字节读入字节数组。

       下面使用InputStream从路径D:\file\test.txt读出内容。

        

 

       3.1、字符输出流(Writer)

       此类定义如下:public abstract class Writer extendsObject implementsAppendable,Closeable,Flushable

       显然,它也需要通过子类对其进行实例化操作,其常用操作方法有:

       范例:使用Writer向文件输出内容:

       

       由此可以发现,我们无法操作的java的API,非常轻松实现了对文件的操作,所以下面Reader类就不再写,感兴趣的可以自己去练习,下面对字节流和字符流做一个比较:

       字节流和字符流在其代码结构上是有很多相似处,但其内部本身是有区别的,其中最大的区别在于字符流在操作的时候会使用到缓冲区,而字节流不会用到。

       在使用字节流OutputStream向外输出时,若最后不关闭流,也可以向外输出,但是若采用字符流Writer向外输出时不关闭流,则肯定不会输出消息,因为内容都存放在缓冲区处,显然,当调用了close()时,意味着清空缓存。



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:281859次
    • 积分:3402
    • 等级:
    • 排名:第9792名
    • 原创:7篇
    • 转载:430篇
    • 译文:0篇
    • 评论:10条
    文章分类
    最新评论