zoukankan      html  css  js  c++  java
  • Java I/O的典型使用方式

    前面已经介绍了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+"
    ");*/
            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等等。

     

  • 相关阅读:
    找出字符串中最长的对称字符串
    spark 数据倾斜的一些表现
    executor.Executor: Managed memory leak detected; size = 37247642 bytes, TID = 5
    机器学习复习笔记
    博客园如何在侧边添加目录
    markdown画图
    用hexo搭建博客
    苏州大学2005-2019复试上机真题及保研期中期末习题
    考研复试面试:计算机网络面试题整理
    python进行日期计算
  • 原文地址:https://www.cnblogs.com/CongLollipop/p/6690308.html
Copyright © 2011-2022 走看看