博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java I/O的典型使用方式
阅读量:7263 次
发布时间:2019-06-29

本文共 4817 字,大约阅读时间需要 16 分钟。

前面已经介绍了IO的各种流,我们知道,可以通过不同的方式组合I/O流。介绍几种典型的I/O的使用方法;

1.缓冲文件读取

打开一个文件,并读取其中的字符,可以使用String或者file对象作为文件名的FileInputReader.

如下:

package IOStreamTest;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;public class BufferdInputFile {        public static String read(String filepath) throws IOException{        FileReader filere = new FileReader(new File(filepath));        int ch;        StringBuilder sb = new StringBuilder();        while((ch=filere.read())!=-1){            sb.append(ch);            System.out.println(ch);        }        filere.close();        return sb.toString();    }   public static void main(String args[]) throws IOException{       System.out.println(read("fortest"));          }}

输入文件: fortest 

 

 

只能一个字符一个字符的读取 结果如下,输出:

 

为了提高速度,可以使用BufferedReader来读取 ,如下所示:

package IOStreamTest;import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;public class BufferdInputFile {        public static String read(String filepath) throws IOException{        BufferedReader bufre = new BufferedReader(new FileReader(new File(filepath)));        StringBuilder sb = new StringBuilder();        String s;        int ch=0;        while((ch=bufre.read())!=-1){            sb.append(ch);        }    /*    while((s=bufre.readLine())!=null)            sb.append(s+"\n");*/        bufre.close();        return sb.toString();            }   public static void main(String args[]) throws IOException{       System.out.println(read("fortest"));          }}

结果与上图一样。

Bufferreader提供readline方法,而filereader只提供

A  ,int read(); // 读取单个字符。返回作为整数读取的字符,如果已达到流末尾,则返回 -1。

B. int read(char []cbuf);//将字符读入数组。返回读取的字符数。如果已经到达尾部,则返回-1 

2从内存中输入

从BufferedInputFile.read中读入的String用来创建一个Stringreader然后调用read每次读取一个字符,并发送到控制台。

public static void main(String args[]) throws IOException{       StringReader sr = new StringReader(BufferdInputFile.read("fortest"));       int ch=0;       while((ch=sr.read())!=-1){           System.out.print((char)ch);//注意read是以int形式返回下一字节,因此要转化成char才能正确打印。       }       //System.out.println(read("fortest"));          }

3.格式化的内存输入

要读取格式化的数据,可以使用DataInputStream,这个是面向字节的IO.因此使用inputstream而不是reader.

public static void main(String args[]) throws IOException{       DataInputStream datain = new  DataInputStream               (new ByteArrayInputStream(BufferdInputFile.read("fortest").getBytes()));       while(datain.available()!=0){        //由于readbyte一次读取一个字符,任何字节的值都是合法的结果,因此返回值不能用来检验输入是否结束。相反,我们可以利用available() //还有多少个供存取的字符检查           System.out.println((char)datain.readByte());       }                }

4.基本的文件输出

filewriter向文件写入数据。通常,创建一个与指定文件链接的filewriter 实际上,会用bufferedwriter包装起来用来缓存输出。可以根据需要将其包装成任意输出流。在此包装城printwriter

在javase5中,可以省略掉装饰工作。添加了辅助构造器(PrintWriter pw = new printwirter(file)).printwriter 可以格式化数据方便阅读。

import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import java.io.StringReader;public class BufferedOutputtest {    public static void main(String args[]) throws IOException{        BufferedReader bufr =new BufferedReader(new StringReader(BufferdInputFile.read("read")));        PrintWriter pw = new PrintWriter                //(new File("fortest"));                (new BufferedWriter(new FileWriter("fortest")));        int linecount =1;        String s;        while((s=bufr.readLine())!=null)            pw.println(linecount++ +":"+s);        pw.close();        //System.out.println(BufferdInputFile.read("fortest"));    }}

5.存储和恢复数据

可以从dataoutputStream写入数据,并用datastream恢复数据。

Java保证我们可以使用datainputstream准确的读取数据,无论读写的平台有多么不一样。

package IOStreamTest;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class dataout_inputstream {    public static void main(String args[]) throws IOException{    DataOutputStream datao =new DataOutputStream(new BufferedOutputStream(new FileOutputStream("fortest")));    datao.writeInt(9);    datao.writeUTF("mark");    datao.writeByte(9);    datao.close();   DataInputStream datain  = new DataInputStream(new BufferedInputStream(new FileInputStream("fortest")));   System.out.println(datain.readInt());   System.out.println(datain.readUTF());    }}

6.读写随机访问文件。RandomAccessFile

类似于组合使用了dataoutput 和datainputstream。

Random适合由大小已知的记录组成的文件。可以用seek将记录从一处转移到另一处。实现了datainput和dataoutput接口,不是继承自outputstream或者inputstream。支持搜寻方法,可以查询当点所处的文件位置(getfilepointer());

 

7.管道流。用于多任务间的通信,也就是说用于并发。pipeinputstream pipeoutputstream,pipereader piperwriter等等。

 

 

 

 

 

转载于:https://www.cnblogs.com/CongLollipop/p/6690308.html

你可能感兴趣的文章