Java.io小结:

Java.io小结:

1.       (stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。 一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL
   
流的方向是重要的,根据流的方向,流可分为两类:输入流和输出流。用户可以从输入流中读取信息,但不能写它。相反,对输出流,只能往输入流写,而不能读它。
    java.io
包中的类对应两类流,一类流直接从指定的位置(如磁盘文件或内存区域)读或写,这类流称为结点流(node stream),其它的流则称为过滤器(filters)。过滤器输入流往往是以其它输入流作为它的输入源,经过过滤或处理后再以新的输入流的形式提供给用户,过滤器输出流的原理也类似

输入流:

2.       以字节为单位(InputStream类型)Stream Hierachy

InputStream                                           

 

FileInputStream

FilterInputStream

 

ByteArrayInputStream

 

ObjectInputStream

PipedInputStream

DataInputStream

PushbackInputStream

 

BufferedInputStream

SequenceInputStream

 

StringBufferInputStream

LineNumberInputStream

抽象类InputStream继承而来(输入流)

 

1) FileInputStream:把一个文件作为InputStream,实现对文件的读取操作

FileInputStream(File file):通过文件对象创建FileInputStream

FileInputStream(FileDescriptor fdObj)通过文件描述创建FileInputStream

FileInputStream(String name):指定文件系统路径名创建FileInputStream

2) PipedInputStream:实现了pipe的概念,一端写入一端读取

PipedInputStream(PipedOutputStream src) 创建 PipedInputStream,以使其连接到传送输出流 src

PipedInputStream() 创建尚未连接的 PipedInputStream

3) ByteArrayInputStream:允许将内存缓冲区数据当做(转换为)输入流。

ByteArrayInputStream(byte[]buf)创建一个ByteArrayInputStream,使用buf作为其缓冲区数组,把内存字节数组转换成字节流。

ByteArrayInputStream(byte[] buf, int offset, int length)

4) ObjectInputStreamObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化,实现持久化存储。ObjectInputputStream实现了接口DataInput(基本类型数据)ObjectInput( 对象、数组以及String对象输入)

ObjectInputStream(InputStream in) 创建从指InputStream读取的ObjectInputStream

5) StringBufferInputStream把一个String对象作为输入创建InputStream

StringBufferInputStream(String s)  已过时。创建一个字符串输入流,以从指定字符串

读取数据

6) SequenceInputStream把多个InputStream合并为一个InputStream

SequenceInputStream(Enumeration<? extends InputStream> e) 通过记住该参数初始化新创建的 SequenceInputStream,该参数必须是生成运行时类型为 InputStream 对象的 Enumeration 型参数。

SequenceInputStream(InputStream s1, InputStream s2)通过记住这两个参数初始化新创建的 SequenceInputStream(将按顺序读取这两个参数,先读取 s1 然后读取 s2),以提供从此 SequenceInputStream 读取的字节。

7) FilterInputStream用来提供装饰器类接口可以控制输入流的类,过滤器类内部修改InputStream确定是否缓冲、是否保留设置行数、是否吧单一字符推回输入流等等。

7.1DataInputStream允许我们从流中读取基本类型的数据以及String的对象。读取格式化数据,可以从DataInputStream字节流中读取基本类型数据。

DataInputStream(InputStreamin)使用指定InputStream 创建一个 DataInputStream

7.2BufferedInputStream:提供缓冲区读取数据,可以提高效率。

BufferedInputStream(InputStream in)
          
创建 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。

BufferedInputStream(InputStream inint size)

7.3LineNumberInputStream:可以跟踪流中的行号,读取和设置行号。getLineNumber()setLineNumber(int)

LineNumberInputStream(InputStream in)   已过时。 构造从指定输入流读取其输入的新行号输入流

7.4PushbackInputStream:可以读到最后一个字节回退。

PushbackInputStream(InputStream in)
          
创建 PushbackInputStream 并保存其参数输入流 in,以便将来使用

 

 

抽象类OutputStream继承而来(输出流)

OutputStream                                          

 

FileOutputStream

FileOutputStream

 

FilterOutputStream

 

ByteArrayOutputStream

ObjectOutputStream

PipedOutputStream

DataOutputStream

BufferedOutputStream

 

PrintStream

1) FileOutputStream:将信息写入指定的文件。

FileOutputStream(Filefile)创建一个向指定File 对象所表示的文件写入数据的输出流。

FileOutputStream(FileDescriptor fdObj) 创建一个向指定文件描述符处写入数据的输出文件流,该文件描述符表示一个到文件系统中的某个实际文件的现有连接。

FileOutputStream(File file, boolean append) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。AppendTrue写入文件末尾,false写入文件开始。

FileOutputStream(String name) 创建一个向具有指定名称文件中写入数据的输出文件流。

FileOutputStream(String name, boolean append)  创建一个向具有指定 name 的文件中写入数据的输出文件流,AppendTrue写入文件末尾,false写入文件开始。

2) ByteArrayOutputStream:在内存创建缓冲区,并且把送往流的数据放置在此缓冲区。

ByteArrayOutputStream() 创建一个新的字节数组输出流。

ByteArrayOutputStream(int size)创建一个新的字节数组输出流,它具有指定大小的缓冲区容量(以字节为单位)。

3) ObjectOutputStream: Java 对象的基本数据类型和图形序列化完成后,写入到OutputStream.

ObjectOutputStream() 为完全重新实现 ObjectOutputStream 的子类提供一种方法,让它不必分配仅由 ObjectOutputStream 的实现使用的私有数据。

ObjectOutputStream(OutputStreamout)创建写入指定OutputStream ObjectOutputStream

4) PipedOutputStream传送输出流可以连接到传送输入流,以创建通信管道。

PipedOutputStream(PipedInputStream snk) 创建连接到指定传送输入流的传送输出流。

PipedOutputStream()  创建尚未连接到传送输入流的传送输出流

5) FilterOutputStream用来提供装饰器类接口可以控制输入流的类

5.1DataOutputStream: 数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入。

DataOutputStream(OutputStream out) 创建一个新的数据输出流,将基本类型数据写入指定基础输出流。

5.2BufferedOutputStream:提供缓冲区缓存输出流,可以提高效率。

BufferedOutputStream(OutputStream out, int size) 创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的基础输出流。

BufferedOutputStream(OutputStream out) 创建一个新的缓冲输出流,以将数据写入指定的基础输出流。

5.3PrintStream用于产生格式化输出。其中DataOutputStream处理数据的存储(存入输出流中,方便DataInputStream进行读取),PrintStream处理显示。PrintStream 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式

PrintStream(File file) 创建具有指定文件且不带自动行刷新的新打印流。

PrintStream(File file, String csn) 创建具有指定文件名称和字符集且不带自动行刷新的新打印流。

PrintStream(OutputStream out) 创建新的打印流。

PrintStream(OutputStream out, boolean autoFlush)    创建新的打印流。

PrintStream(OutputStreamout,booleanFlush,Stringencoding)创建新的打印流。

PrintStream(String fileName) 创建具有指定文件名称且不带自动行刷新的新打印流。

PrintStream(String fileName, String csn)  创建具有指定文件名称和字符集且不带自动行刷新的新打印流。

3.       以字符为单位

4.         扩展自Reader

Reader                                          

 

FilterReader

InputStreamReader

BufferedReader

StringReader

PipedReader

FileReader

 

CharArrayReader

 

PushbackReader

      1)FilterReader:对应于FilterStream

              1.1) PushbackReader:对应于PushbackStream。允许回退一个字符。

       2InputStreamReader:字节流向字符流转换的桥梁

InputStreamReader(InputStreamin) 创建一个使用默认字符集的 InputStreamReader

InputStreamReader(InputStream in, java.nio.charset.Charset cs) 创建使用给定字符集的 InputStreamReader

InputStreamReader(InputStreamin, java.nio.charset.CharsetDecoder dec) 创建使用给定字符集解码器的 InputStreamReader

InputStreamReader(InputStream in, String charsetName) 创建使用指定字符集的 InputStreamReader

              2.1FileReader:与FileInputstream对应。用来读取字符文件的便捷类

       3BufferedReader:对应BufferedInputStream

                     3.1LineNumberReader:与LineNumberInputStream对应。

       4PipedReader:对应PipedInputStream

       5CharArrayReader:对应ByteArrayInputStream

       6StringReader其源为一个字符串的字符流,可以从内存读取字符流。

StringReader(String s)  创建一个新字符串 reader。从字符串s读取。

扩展自Writer

Writer                                          

 

FilterWriter 

OutputStreamWriter 

BufferedWriter 

StringWriter 

PipedWriter 

FileWriter 

CharArrayWriter 

 

1FilterWriter:只是一个占位符,BufferedWriter并不是继承自FilterWriter

2OutputStreamWriterOutputStreamWriter 是字符流通向字节流的桥梁。

OutputStreamWriter(OutputStream out)

创建使用默认字符编码的 OutputStreamWriter

OutputStreamWriter(OutputStream out, java.nio.charset.Charset cs)
 
创建使用给定字符集的 OutputStreamWriter

OutputStreamWriter(OutputStream out,java.nio.charset.CharsetEncoder enc)   创建使用给定字符集编码器的 OutputStreamWriter

OutputStreamWriter(OutputStream out, String charsetName)  创建使用指定字符

集的 OutputStreamWriter

        2.1FileWriter:对应FileInputStream

3BufferedWriter:对应BufferedOutputStream

4StringWriter: 一个字符流,可以用其回收在字符串缓冲区中的输出来构造字符串。向内存缓冲区写入字符串。

StringWriter()创建具有默认初始字符串缓冲区大小的新字符串 writer

StringWriter(int initialSize) 创建具有指定初始字符串缓冲区大小的新字符串 writer

5PipedWriter:对应PiledOutputStream

6CharArrayWriter:对应ByteArrayOutputStream·

4. RandomAccessFile:类似组合了DataInputStreamDataOutputStream
1)
可通过RandomAccessFile对象完成对文件的读写操作
2)
在产生一个对象时,可指明要打开的文件的性质:r,只读;w,只写;rw可读写
3)
可以直接跳到文件中指定的位置

5.压缩解压缩包

 

Java.util.Zip                                          

 

CheckInputStream 

CheckOutputStream 

 

InflateInputStream

DeflateOutputStream 

GZIPInputStream

 

GZIPOutputStream

 

 

ZIPInputStream

 

ZIPOutputStream

 

这些数据流是从InputStream和OutputStream继承而来,是字节流方式压缩。如果需要字符流可以通过(InputStreamReader和OutputStreamWriter转换)

1CheckInputStream需要维护所读取数据校验和的输入流。

CheckedInputStream(InputStream in, Checksum cksum)  使用指定校验和创建输入流。

2CheckOutputStream需要维护写入数据校验和的输出流。校验和可用于验证输出数据的完整性

CheckedOutputStream(OutputStream out, Checksum cksum)  使用指定校验和创建输出流

3InflateInputStream此类为解压缩 "deflate" 压缩格式的数据实现流过滤器

InflaterInputStream(InputStream in)
          
使用默认解压缩器和缓冲区大小创建一个新输入流。

InflaterInputStream(InputStream in, Inflater inf)
          
创建一个带有指定解压缩器和默认缓冲区大小的新输入流。

InflaterInputStream(InputStream in, Inflater inf, int size)
          
使用指定解压缩器和缓冲区大小创建一个新输入流

4DeflateOutputStream此类为使用 "deflate" 压缩格式压缩数据实现输出流过滤器

DeflaterOutputStream(OutputStream out)
          
使用默认压缩器和缓冲区大小创建一个新输出流。

DeflaterOutputStream(OutputStream out, Deflater def)
          
使用指定压缩器和默认缓冲区大小创建一个新输出流

DeflaterOutputStream(OutputStream out, Deflater def, int size)
          
使用指定压缩器和缓冲区大小创建一个新输出流。

5GZIPInputStream此类为读取 GZIP 文件格式的压缩数据实现流过滤器

GZIPInputStream(InputStream in) 使用默认缓冲区大小创建新的输入流

GZIPInputStream(InputStream in,int size)使用指定缓冲区大小创建新的输入流。

6GZIPOutputStream此类为使用 GZIP 文件格式写入压缩数据实现流过滤器。

GZIPOutputStream(OutputStream out) 使用默认缓冲区大小创建新的输出流。

GZIPOutputStream(OutputStreamout,int size)使用指定缓冲区大小创建新输出流。

7ZIPOutputStream此类为以 ZIP 文件格式写入文件实现输出流过滤器

ZipOutputStream(OutputStream out)  创建新的 ZIP 输出流。

8ZIPInputStream此类为读取 ZIP 文件格式的文件实现输入流过滤器

ZipInputStream(InputStream in) 创建新的 ZIP 输入流。

注:1Checksum校验和对象Adler32CRC32

       2ZipFile:此类用于从 ZIP 文件读取条目。

       ZipFile(String name) 打开 ZIP 文件进行阅读。

       ZipFile(File file,int mode)打开新ZipFile 以指定模式从指定 File 对象读取。

       3ZipEntry此类用于表示 ZIP 文件条目

       ZipEntry(ZipEntry e)
          
使用从指定 ZIP 条目获取的字段创建新的 ZIP 条目。

       ZipEntry(String name)
          
使用指定名称创建新的 ZIP 条目。

  java 代码

import java.io.*;
public class TestIO{
 
public static void main(String[] args)
 
throws IOException{
 //1.以行为单位从一个文件读取数据

 
BufferedReader in = new BufferedReader(
  
new FileReader("F://nepalon//TestIO.java"));
 
String s, s2 = new String();
 
while((s = in.readLine()) != null)
 
s2 += s + "/n";
 
in.close();
 //1b. 接收键盘的输入

 BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));

 // System.in读入的是字节


 System.out.println("Enter a line:");
 
System.out.println(stdin.readLine());
 //2. 从一个String对象中读取数据

 
StringReader in2 = new StringReader(s2);
 
int c;
 
while((c = in2.read()) != -1)
 
System.out.println((char)c);
 
in2.close();
 //3. 从内存取出格式化输入

 
try{
  
DataInputStream in3 =new DataInputStream(new ByteArrayInputStream(s2.getBytes()));
  
while(true)
   
System.out.println((char)in3.readByte());
 
}
 
catch(EOFException e){
  
System.out.println("End of stream");
 
}
 //4. 输出到文件

 
try{
  
BufferedReader in4 =new BufferedReader(new StringReader(s2));
  
PrintWriter out1 =new PrintWriter(new BufferedWriter(new FileWriter("F://nepalon// TestIO.out")));
  
int lineCount = 1;
  
while((s = in4.readLine()) != null)
   out1.println(lineCount++ + "
" + s);
   
out1.close();
   
in4.close();
 
}
 
catch(EOFException ex){
  
System.out.println("End of stream");
 
}
 //5. 数据的存储和恢复

 
try{
  
DataOutputStream out2 =new DataOutputStream(new BufferedOutputStream(
   
new FileOutputStream("F://nepalon// Data.txt")));
  
out2.writeDouble(3.1415926);
  
out2.writeChars("/nThas was pi:writeChars/n");
  
out2.writeBytes("Thas was pi:writeByte/n");
  
out2.close();
  
DataInputStream in5 =new DataInputStream(
   
new BufferedInputStream(new FileInputStream("F://nepalon// Data.txt")));
   
BufferedReader in5br =new BufferedReader(new InputStreamReader(in5));
   
System.out.println(in5.readDouble());
   
System.out.println(in5br.readLine());
   
System.out.println(in5br.readLine());
 
}
 
catch(EOFException e){
  
System.out.println("End of stream");
 
}
 //6. 通过RandomAccessFile操作文件

 
RandomAccessFile rf = new RandomAccessFile("F://nepalon// rtest.dat", "rw");
 
for(int i=0; i <10; i++)
  
rf.writeDouble(i*1.414);
  
rf.close();
  
rf = new RandomAccessFile("F://nepalon// rtest.dat", "r");
  
for(int i=0; i <10; i++)
   System.out.println("Value " + i + "
" + rf.readDouble());
   
rf.close();
   
rf = new RandomAccessFile("F://nepalon// rtest.dat", "rw");
   
rf.seek(5*8);
   
rf.writeDouble(47.0001);
   
rf.close();
   
rf = new RandomAccessFile("F://nepalon// rtest.dat", "r");
   
for(int i=0; i <10; i++)
    System.out.println("Value " + i + "
" + rf.readDouble());
    
rf.close();
  //7.读取二进制文件

BufferedInputStream bf = new BufferedInputStream(

              new FileInputStream(“F://nepalon// Data.txt”)

try{

byte[] data =new byte[bf.available()];

 bf . read(data);

return data;

}finally{bf.close();}

//GZIP进行简单的压缩

BufferedReader in = new BufferedReader(

      new FileReader((args[0])));

    BufferedOutputStream out = new BufferedOutputStream(

      new GZIPOutputStream(

        new FileOutputStream("test.gz")));//压缩

    System.out.println("Writing file");

    int c;

    while((c = in.read()) != -1)

      out.write(c);

    in.close();

    out.close();

    System.out.println(" Reading file");

    BufferedReader in2 = new BufferedReader(

      new InputStreamReader(new GZIPInputStream(

        new FileInputStream("test.gz"))));//解压缩读取

    String s;

    while((s = in2.readLine()) != null)

      System.out.println(s);

//ZIP文件保存

FileOutputStream f = new FileOutputStream("test.zip");

    CheckedOutputStream csum =

      new CheckedOutputStream(f, new Adler32());

     ZipOutputStream zos = new ZipOutputStream(csum);

     BufferedOutputStream out =

      new BufferedOutputStream(zos);

    zos.setComment("A test of Java Zipping");

    // No corresponding getComment(), though.

    for(String arg : args) {

      print("Writing file " + arg);

      BufferedReader in =

        new BufferedReader(new FileReader(arg));

      zos.putNextEntry(new ZipEntry(arg));

      int c;

      while((c = in.read()) != -1)

        out.write(c);

      in.close();

      out.flush();

    }

    out.close();

    // Checksum valid only after the file has been closed!

    print("Checksum: " + csum.getChecksum().getValue());

    // Now extract the files:

    print(" Reading file");

    FileInputStream fi = new FileInputStream("test.zip");

    CheckedInputStream csumi =

      new CheckedInputStream(fi, new Adler32());

    ZipInputStream in2 = new ZipInputStream(csumi);

    BufferedInputStream bis = new BufferedInputStream(in2);

    ZipEntry ze;

    while((ze = in2.getNextEntry()) != null) {

      print(" Reading file " + ze);

      int x;

      while((x = bis.read()) != -1)

        System.out.write(x);

    }

    if(args.length == 1)

    print("Checksum: " + csumi.getChecksum().getValue());

    bis.close();

    // Alternative way to open and read Zip files:

    ZipFile zf = new ZipFile("test.zip");

    Enumeration e = zf.entries();

    while(e.hasMoreElements()) {

      ZipEntry ze2 = (ZipEntry)e.nextElement();

      print("File: " + ze2);

}
 }

 

 



 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值