Java基础(五) | 不得不谈的IO与NIO

2017-07-20  本文已影响0人  采风JS

本文主要讲述IO与NIO的使用及异同,通过具体的代码实例,熟悉用法;

一、IO

Java中IO布局如图1所示:


图1:IO流总览.png
public class FileDictory {
    
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        //此处注意转义字符
        File dir=new File("D:\\From-phone\\pic\\info");
        List<File> list = new ArrayList<File>();
        getDictory(dir,list);
        writeToFile(list,new File(dir,"crossinfo.txt"));
    }
    
    public static void print(List<File> list){
        for(File f : list){
            System.out.println(f.getAbsolutePath());
        }
    }
    public static void getDictory(File dir,List<File> list){
        File[] files = dir.listFiles();
        for(File f: files){
            if(f.isDirectory())
                getDictory(f,list);
            else
                list.add(f);
        }
    }

    // 操作流的基本框架
    public static void writeToFile(List<File> list,File file) throws IOException {
        // 外部创建引用,内部实例化
        BufferedWriter bw = null;
        try{
            bw = new BufferedWriter(new FileWriter(file));
            for(File f:list){
                bw.write(f.getAbsolutePath());
                bw.newLine();
            }
        }
        catch(IOException e){
            throw e;
        }
        finally{
            // 流释放检查
            try{
                if(bw!=null){
                    bw.close();//不同代码块的访问
                }
            }
            catch(IOException e){
                throw e;
            }
        }
    }
}

二、NIO

    public static void main(String[] args) throws Exception {
        
        FileInputStream fis = new FileInputStream("source.txt");
        FileOutputStream fos = new FileOutputStream("destination.txt");
        FileChannel inCha = fis.getChannel();
        FileChannel outCha = fos.getChannel();
        ByteBuffer buffer = ByteBuffer.allocate(1024);
            
        while(true){
            int res = inCha.read(buffer);
            if(res == -1){
                break;
            }
            // 实现写读模式切换
            buffer.flip();
            outCha.write(buffer);
            buffer.clear();
        }
        
        inCha.close();
        outCha.close();
        fis.close();
        fos.close();
    }

三、IO与NIO的异同

上一篇 下一篇

猜你喜欢

热点阅读