java中NIO对文件的读取操作

xiaoxiao2021-02-28  72

转载地址:http://blog.csdn.net/javayang2010/article/details/6775370 NIO相比普通的IO,多的内容在于指定缓冲区和通道。这种和底层直接交互的流操作方式,相比普通流而言,在效率上有所提升。以下为完整的NIO操作实例。

 

import Java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.nio.Buffer; import java.nio.ByteBuffer; import java.nio.channels.FileChannel;

public class NIOOperDemo {  public void readFileByIO(String fileName){   FileInputStream fis=null;   try {     fis=new FileInputStream(fileName);     byte[] buffer=new byte[1024];     int len=0;     while((len=fis.read(buffer))!=-1){      System.out.write(buffer,0,len);     }   } catch (FileNotFoundException e) {    // TODO Auto-generated catch block    e.printStackTrace();   } catch (IOException e) {    // TODO Auto-generated catch block    e.printStackTrace();   }finally{    try {     fis.close();    } catch (IOException e) {     // TODO Auto-generated catch block     e.printStackTrace();    }   }  }    public void readByNIO(String file){   //第一步 获取通道   FileInputStream fis = null;   FileChannel channel=null;   try {    fis = new FileInputStream(file);    channel=fis.getChannel();    //文件内容的大小    int size=(int) channel.size();        //第二步 指定缓冲区       ByteBuffer buffer=ByteBuffer.allocate(1024);    //第三步 将通道中的数据读取到缓冲区中    channel.read(buffer);        Buffer bf= buffer.flip();    System.out.println("limt:"+bf.limit());        byte[] bt=buffer.array();    System.out.println(new String(bt,0,size));        buffer.clear();    buffer=null;   } catch (FileNotFoundException e) {    // TODO Auto-generated catch block    e.printStackTrace();   } catch (IOException e) {    // TODO Auto-generated catch block    e.printStackTrace();   }finally{    try {     channel.close();     fis.close();         } catch (IOException e) {     // TODO Auto-generated catch block     e.printStackTrace();    }          }     }

 /**   * 利用NIO将内容输出到文件中   * @param file   */  public void writeFileByNIO(String file){          FileOutputStream fos=null;          FileChannel fc=null;          ByteBuffer buffer=null;          try {    fos=new FileOutputStream(file);     //第一步 获取一个通道    fc=fos.getChannel();    //buffer=ByteBuffer.allocate(1024);     //第二步 定义缓冲区    buffer=ByteBuffer.wrap("Hello World 2".getBytes());     //将内容写到缓冲区    fos.flush();    fc.write(buffer);       } catch (FileNotFoundException e) {    // TODO Auto-generated catch block    e.printStackTrace();   } catch (IOException e) {    // TODO Auto-generated catch block    e.printStackTrace();   }finally{    try {     fc.close();     fos.close();    } catch (IOException e) {     // TODO Auto-generated catch block     e.printStackTrace();    }       }  }

 public static void main(String[] args) {   NIOOperDemo nood=new NIOOperDemo();   String fileName="c:\\hello.txt";   //nood.readFileByIO(fileName);   //nood.readByNIO(fileName);   nood.writeFileByNIO(fileName);  }        

}

转载请注明原文地址: https://www.6miu.com/read-40754.html

最新回复(0)