Io文件流操作-流

1.1读写字节
抽象类InputStream和OutputStream

各自拥有一个抽象方法abstract void read()/write(),在执行时都会发生阻塞,直至字节被读入或者写出,并且在完成读写操作之后,都要调用close()方法来关闭流,以释放有限的系统资源。
如果不想发生阻塞,可以通过available()方法来检查当前读入的字节数量来实现:

int bytesavaliable =in.avaliable();
if(bytesavaliable>0){
	byte[] data = new byte[bytesavaliable];
	in.read(data);
}

read()方法特点:读入一个字节并返回读入的字节,或者在遇到输入源结尾时返回-1;因此在设计具体的输入流时,必须覆盖该方法。

除此之外,InputStream类还拥有很多非抽象方法:
long skip(long n),在输入流中跳过n个字节,并返回实际读入的字节数
void mark(int readlimit),在输入流的当前位置打一个标记(并不是所有流都支持这一操作)
void reset(),返回到最后一个标记,随后对read()方法的调用将重新读入这些字节。如果当前没有标记,则这个流不被重置
boolean markSupported(),如果流支持标记,则返回true
** void close()**,关闭输入流

OnputStream类也有一些非抽象方法:
void flush(),手动冲刷输出流,将缓冲数据发送
void close(), 关闭输出流

1.2完整的流家族

DataIn/OutputStream可以以二进制格式读取所有Java类型
ZipIn/OutputStream可以以zip格式读取所有Java类型
而对于Unicode文本,则可用Reader和Witer这个两个抽象类的子类
以及另外四个附加的接口:Closeable,Flushable,Readable和Appendable
前两个接口分别拥有以下方法:
void close() throws IOException和void flush(),
InputStream,OutStream,Reader和Writer都实现了Closeable接口

1.3组合流过滤器

FileIn/OutputStream可以提供一个附着在磁盘文件上的输入流和输出流,
你只需向其构造器提供完整的路径名或文件名即可:

FileInPutStream fin = new FileInPutStream("employee.dat")

这一行代码便可查看用户目录下名为"employee.data"的文件,但同样只支持字节级别的读取.
因此可以通过不同的流组合使用来达到目的.
例如,从文件中读入数字:

FileInPutStream fin = new FileInPutStream("employee.dat");
DataInPutStream din = new DataInPutStream(fin);
double s = din.readDouble();

注意:所有java.io中的类都将相对路径名解释为用户的工作目录开始,你也可以通过调用Stytem.getProperty(“user.dir”)来获取这个信息
由于\在Java字符串中是转义字符,因此在windows中要使用\,当然也可以使用/,因为大部分windows的文件处理系统会将其视为文件分隔符,但并不推荐这么做,因为windows的系统函数行为会发生变化.所以应该使用程序所运行的平台的文件分隔符,可以通过字符串常量java.io.File.separator来获得

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值