黑马程序员_java中的io流(2)

 ------- android培训java培训、期待与您交流! ----------


一、java.io:io技术是java中最为重要的技术之一,io流负责大多数的应用程序与外部设备的输入与输出,庞大的io体系定义了众多的方法来完成实现,而,

而,这些方法都被封装到了java,io包中。因为io流主要是用于操作数据的,而数据的最常见的体现形式就是文件,所以,我们先看一下,io流中与文件关联的部分:
二、File类:File类是io包中唯一代表磁盘文件本身的对象.
1)创建:boolean creatNewFile();在指定位置创建文件,如果文件已经存在,返回false;和输出流不一样的是,输出流对象已建立创建文件,而且文件已经存在,则会覆盖。
创建一级文件夹:boolean mkdir();
创建多级文件夹:boolean mkdir();
2)删除:boolean delete();如果文件正在被使用,删除不了,则返回false;
void deleteOnExit(); 在程序退出时,删除指定文件;
3)boolean exists();判断文件是否存在;
 boolean isFile();判断指定对象地类型是否是标准Files对象;
boolean isDirectory();判断指定File对象是否是一个目录;
boolean isHidden()判断指定文件是否是一个隐藏文件;
boolean isAbsolute();判断指定文件路径名是否是绝对路径;
4)获取文件信息:
String getName()获取文件名;
String getPath();获取文件的路径;
String getParent();获取指定目录的上一级目录的字符串表现形式;
Long length();返回指定文件的长度;
String getAbsollutePath();返回指定文件的绝对路径;
Long lastMedifield();返回指定文件的最后修改的时间;
5)递归:在文件操作时,我们要列出一个目录中的所有内容,而目录中还嵌套着目录的话,这时我们只需要使用
同一个列出目录功能的函数来完成即可,在列出的过程中出现的还是目录的话,只要再次调用本功能,如此形成嵌套的
函数自身调用自身的现象,这种编程手法和表现形式,就成为递归。
注意:合理的限制递归的次数,尽量避免内存的溢出。

三、io流中的其它流:

1)管道流:pipedInputStream和PipedOutputStream,PipedInputStream负责向管道流中写入数据,而,pipedInputStream负责读取写入到此流中的数据。在多线程机制中,此流还可用于线程间的通信。

2)ByteArrayInputStream与ByteArrayOutputStream:ByteArrayInputStream在构造的时候,需要定义数据源,而且,数据源是个字节数组。而ByteArrayOutputStream在构造

时候不用定义数据目的,因为该对象已经在内部封装了一个可变长度的字节数组,它就是数据的目的地。因为这两个对象操作的都是数组,并没有使用到系统资源,所以,应用此流时,不用进行close()动作,且,流对象关不关闭,都可以被继续使用,也不会发生IOException。

3)打印流:printStream提供了很多打印的方法,可将各种基本类型的数据转换成字符串输出。System.in是特殊的输入流,对应的是键盘;System.out对应的是显示器,是特殊的输出流。

PrintStream(OutputStream out)
PrintStream(OutputStream out,boolean auotflush)
PrintStream(OutputStream out,boolean auotflush, String encoding)

其中,auotflush控制在java中遇到(/n)换行符时是否自动清空缓冲区,encoding是指定哪种编码形式。

与printstream对应的是printWriter:

PrintWriter(OutputStream)
PrintWriter(OutputStream, boolean)
PrintWriter(Writer)
PrintWriter(Writer, boolean)

其中,PrintWriter只有在设置了autoflush的模式下并使用println方法才能自动清空缓冲区

3)DataInputStream与DataOutputStream:提供了与平台无关的各种数据类型的操作。

4)合并流:SequenceInputStream可实现两个流的合并操作。

5)对象的持久化:ObjectInputStream和ObjectOutputStream:将对象转换成二进制数据流放在硬盘上,找一个能够长期保存这数据的介质,把对象存起来,之后把对象读取出来可以继续使用,就说这个对象实现了持久化的存储。但要求,这些对象必须实现serializable接口,此接口中没有任何方法,仅仅被用制作一种标记,已被编译器做特殊处理。

注意:static修饰的变量不能被持久化,transient修饰的变量不能被持久化。

6)RandomAccessFile:该类不属于io包中的子类,而是直接继承自Object,它是io包中的成员。它支持“随机访问”方式,可将文件跳转到任意位置处读写数据。此对象有个位置指示器,可通过getFilePointer()方法获取当前指针的位置,同时可通过seek方法和skipBytes()改变指针的位置。

注意:该类仅限于操作文件,不能访问其它的IO设备。它的构造方法:new RandomAccessFile(f,"rw"); // 读写方式,如果要操作的文件不存在,会自动创建,如果存在也不会覆盖。
new RandomAccessFile(f,"r");//只读方式,不会创建文件,回去读取一个已经存在的文件,如果文件不存在,则发生FileNoFoundException

 ------- android培训java培训、期待与您交流! ----------



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值