日期:2011-03-22 16:17:00 来源:本站整理
java的输入流[Java编程]
本文“java的输入流[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
当然,我们常常想做的一件事情是将格局化的输出打印到掌握台,但那已在第5章成立的com.bruceeckel.tools中得到了简化.
第1到第4部份演示了输入流的成立与利用(固然第4部份展示了将输出流作为一个测试工具的简单利用).
1. 缓冲的输入文件
为翻开一个文件以便输入,需求利用一个FileInputStream,同时将一个String或File对象作为文件名利用.为提高速度,最好先对文件举行缓冲处理,从而得到用于一个BufferedInputStream的构建器的后果句柄.为了以格局化的情势读取输入数据,我们将那个后果句柄赋给用于一个DataInputStream的构建器.DataInputStream是我们的终究(final)对象,并是我们举行读取操作的接口.
在这个例子中,只用到了readLine()办法,但理所当然任何DataInputStream办法都可以采取.一旦到达文件末尾,readLine()就会返回一个null(空),以便中止并退出while循环.
“String s2”用于堆积完好的文件内容(包含必须增添的新行,因为readLine()去除了那些行).随后,在本程序的背脸部份中利用s2.最后,我们调用close(),用它关闭文件.从技术上说,会在运行finalize()时调用close().并且我们但愿一旦程序退出,就发生这种情形(无论能否举行垃圾汇集).但是,Java 1.0有一个非常突出的错误(Bug),造成这种情形不会发生.在Java 1.1中,必须明确调用System.runFinalizersOnExit(true),用它保证会为系统中的每个对象调用finalize().但是,最安全的办法还是为文件明确调用close().
2. 从内存输入
这一部份采取已经包含了完好文件内容的String s2,并用它成立一个StringBufferInputStream(字串缓冲输入流)——作为构建器的参数,要求利用一个String,而非一个StringBuffer).随后,我们用read()顺次读取每个字符,并将其发送至掌握台.注意read()将下一个字节返回为int,所以必须将其造型为一个char,以便精确地打印.
3. 格局化内存输入
StringBufferInputStream的接口是有限的,所以普通需求将其封装到一个DataInputStream内,从而加强它的本领.但是,若挑选用readByte()每次读出一个字符,那么全部值都是有效的,所以不可再用返回值来侦测什么时刻完毕输入.相反,可用available()办法判断有多少字符可用.下面这个例子展示了若何从文件中一次读出一个字符:
注意取决于当前从什么媒体读入,avaiable()的工作方法也是有所辨别的.它在字面上意味着“可以不受阻塞读取的字节数目”.对一个文件来说,它意味着整个文件.但对一个差别种类的数据流来说,它却大概有差别的含义.因此在利用时应考虑全面.//: TestEOF.java // Testing for the end of file while reading // a byte at a time. import java.io.*; public class TestEOF { public static void main(String[] args) { try { DataInputStream in = new DataInputStream( new BufferedInputStream( new FileInputStream("TestEof.java"))); while(in.available() != 0) System.out.print((char)in.readByte()); } catch (IOException e) { System.err.println("IOException"); } } } ///:~
为了在这样的情形下侦测输入的完毕,也可以通过捕捉一个违例来实现.但是,若真的用违例来掌握数据流,却显得有些大材小用.
4. 行的编号与文件输出
这个例子展示了若何LineNumberInputStream来跟踪输入行的编号.在这里,不可简单地将全部构建器都组合起来,因为必须保持LineNumberInputStream的一个句柄(注意这并非一种担当环境,所以不能简单地将in4造型到一个LineNumberInputStream).因此,li包容了指向LineNumberInputStream的句柄,然后在它的底子上成立一个DataInputStream,以便读入数据.
这个例子也展示了若何将格局化数据写入一个文件.首先成立了一个FileOutputStream,用它同一个文件衔接.考虑到效率方面的缘由,它生成了一个BufferedOutputStream.这几近必定是我们普通的做法,但却必须明确地这样做.随后为了举行格局化,它转换成一个PrintStream.用这种方法成立的数据文件可作为一个原始的文本文件读取.
标志DataInputStream什么时刻完毕的一个办法是readLine().一旦没有更多的字串可以读取,它就会返回null.每个行城市伴随自己的行号打印到文件里.该行号可通过li查询.
可看到用于out1的、一个明确指定的close().若程序预备掉回头来,并再次读取相同的文件,这种做法就显得相当有效.但是,该程序直到完毕也没有查抄文件IODemo.txt.正如从前指出的那样,假如不为自己的全部输出文件调用close(),便大概发现缓冲区不会得到革新,造成它们不完好.
以上是“java的输入流[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:java的输出流
- ·下一篇文章:java的IO流的典型操纵
- ·中查找“java的输入流”更多相关内容
- ·中查找“java的输入流”更多相关内容
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论