流和文件( 4)
辽宁经济职业技术学院信息系
硕士、副教授 陈英
编写压缩文件
java.util.zip.ZipOutputStream
ZipOutputStream() 它可以接受 OutputStream类
型的参数,一般是 FileOutputStream对象。
一个 ZIP文件中包含一个或者多个压缩文件,
ZIP中的每个文件都由一个 ZIP条目 (ZIP entry)
识别。
ZIP条目由类 ZIPentry的一个对象表示,这个类
中有一个构造器可以接受一个 String对象,取出
该条目的名字。通常这就是一个文件名。
myZipFile.putNextEntry(myZipEntry); 该语句
定义了压缩输出流的下一条 ZIP条目。可以写入
ZIP条目,也就是想要添加到 ZIP的文件。
打印输出的格式化
对输出进行格式化处理涉及到大量的工
作。但通过自定义 PrintWriter的子类可
以很容易地实现数值输出按列对齐。
FormatWriter类计划用于以固定宽度的
字段的输出数据。 FormatWriter类中的
惟一数据成员(实例字段)是类型为 int
的变量 width,它包含输出字段的宽度。
由于是从 PrintWriter中派生出自己的类,
因此可以使用 PrintWriter类中的所有设
施。
从输入流读取
为了从输入流中读取,特别是当这个流是一个
磁盘文件的时候,一般需要使用过滤器输入流。
否则只能从流中读取字节。
在实际应用中最起码也要读出基本类型的数据,
所以可以从一个标记着想要读取的
FileInputStream对象生成一个
DataInputStream对象。
FileInputStream对象被传递到
DataInputStream构造器以生成用于读取文件
的字节流对象。这个对象将提供从该文件中读
取数据类型所需的方法。
FileInputStream对象只用于处理一个字节或者
字节数组的基本 read()方法。
java.io.FileDescriptor
FileOutputStream对象有一个 getFD()方法,返回
一个 FileDescriptor类型的对象,它表示当前与
物理文件的连接。
完成了一个文件的写入之后,FileDescriptor对
象可以用来生成一个字节输入流对象。
由于 FileInputStream类有一个接受
FileDescriptor对象的构造器,所以可以把相同
的文件读回来。
FileOutputStream (FileDescriptor desc)
该构造器表示根据参数 desc生成一个输出流。
FileDescriptor对象表示一个现有的文件连接,
因为这个文件必须存在,所以这个构造器不能抛
出一个输入 /输出异常。
java.util.zip.ZipInputStream
ZIP文件是存储了一个或多个文件的存档文件,
它通常使用压缩格式。
每个 ZIP文件都有一个头部,它包含了文件名和
使用的压缩方法等信息。
ZipInputStream(InputStream in)
该构造器用来读取一个 ZIP文件。其方法使用了
一个给定的 InputStream (如 FileInputStream)
来创建一个压缩输出流。接着你需要查看存档中
的每一项,
zipEntry getNextEntry()
该方法表示下一项的 ZipEntry类型的对象。
读取 ZIP文件
zipInputStream zin = new zipInputStream
(new FileInputStream(zipname));
zipEntry entry;
while ((entry = zin.getNextEntry()) != null )
{
analyze entry;
read the conterts of zin;
zin.colseEntry();
}
zin.close();
java.util.zip.ZipInputStream
zipInputStream(InputStream in)
该构造器使用一个给定的 InputStream来创建
一个 zipInputStream。其中 in表示底层的输
入流。
zipEntry getNextEntry()
返回一个表示下一项的 zipEntry对象。如果
没有更多的项则返回 null。
void closeEntrys()
关闭 ZIP文件中的当前打开项。你还可以继
续使用 getNextEntry()来读取下一项。
小结
在 Java中有数据传输的地方都用到 I/O流
(通常是文件,网络,内存和标准输入输出等 )
InputStream 和 OutputStream是所有 I/O流的
祖先 (只有 RandomAccessFile类是一个例
外 ),read和 write是它们最基本的方法,读写单
位是字节,
在众多的流对象中,并不是每一种都单独使用,
其中过滤流的子类在数据送出去之前做必要
的处理,
文件 文件输入流 缓冲输入流 行号输入流 数据输入流 目的
小结
通向一个物理文件的路径可以表示成 File的一个
对象。
物理文件也可以表示为一个 FileDescriptor类型
的对象。
流是一个顺序输入源或者顺序输出源的抽象表
示。
支持流操作的类包含在 java.io包中。
Java对持两种流操作:
1) 字节流操作
2) 字符流操作
java.io.PushbackInputStream
PushbackInputStream(InputStream in)
构造一个具有一个字节预先量的流。
PushbackInputStream(InputStream in)
构造一个具有指定大小的预先缓冲的流。
Void unread(int b)
回退一个字节,它被用于下一次读取调
用。每次只能回退一个字符。其中参数
b 表示将要重新读取的字节。
求质数的工作原理
任何非质数都肯定是一个质数因子的乘积,
因此我们只需要把一个候选的数除以一个小
于或者等于该候选数平方根的数就可以检查
出它是否为质数。
long limit =
(long)Math.ceil(Math.sqrt((double)number));
Math.sqrt()方法生成的 number的平方根为
double类型的值。该值被传递到 ceil()方法。
它也是 Math类的一个成员,它返回不小于传
递给它的值的最小正数。