• 技术文章 >Java >Java基础

    java中如何读取文件?

    尚2019-12-04 10:01:05原创3283

    读取文件有多种方式,基于传统的输入流方式或基于nio的Buffer缓冲对象和管道读取方式甚至非常快速的内存映射读取文件。

    java中四种读取文件方式:(推荐:java视频教程

    1、RandomAccessFile:随机读取,比较慢优点就是该类可读可写可操作文件指针

    2、FileInputStream:io普通输入流方式,速度效率一般

    3、Buffer缓冲读取:基于nio Buffer和FileChannel读取,速度较快

    4、内存映射读取:基于MappedByteBuffer,速度最快

    RandomAccessFile读取

    //RandomAccessFile类的核心在于其既能读又能写
    
    public void useRandomAccessFileTest() throws Exception {
    
        RandomAccessFile randomAccessFile = new RandomAccessFile(new File("e:/nio/test.txt"), "r");
    
        byte[] bytes = new byte[1024];
        int len = 0;
        while ((len = randomAccessFile.read(bytes)) != -1) {
            System.out.println(new String(bytes, 0, len, "gbk"));
        }
    
        randomAccessFile.close();
    }

    FielInputStream读取

    //使用FileInputStream文件输入流,比较中规中矩的一种方式,传统阻塞IO操作。
    
    public void testFielInputStreamTest() throws Exception {
    
        FileInputStream inputStream = new FileInputStream(new File("e:/nio/test.txt"));
    
        // 使用输入流读取文件,以下代码块几乎就是模板代码
        byte[] bytes = new byte[1024];
        int len = 0;
        while ((len = inputStream.read(bytes)) != -1) {// 如果有数据就一直读写,否则就退出循环体,关闭流资源。
            System.out.println(new String(bytes, 0, len, "gbk"));
        }
        inputStream.close();
    }

    Buffer缓冲对象读取

    // nio 读取
    
    public void testBufferChannel() throws Exception {
    
        FileInputStream inputStream = new FileInputStream(new File("e:/nio/test.txt"));
    
        FileChannel fileChannel = inputStream.getChannel();
        ByteBuffer buffer = ByteBuffer.allocate(1024);
    
        // 以下代码也几乎是Buffer和Channle的标准读写操作。
        while (true) {
            buffer.clear();
            int result = fileChannel.read(buffer);
            buffer.flip();
            if (result == -1) {
                break;
            }
            System.out.println(new String(buffer.array(), 0, result, "gbk"));
        }
        inputStream.close();
    }

    内存映射读取

    public void testmappedByteBuffer() throws Exception {
    
        FileInputStream inputStream = new FileInputStream(new File("e:/nio/test.txt"));
        FileOutputStream outputStream = new FileOutputStream(new File("e:/nio/testcopy.txt"),true);
    
        FileChannel inChannel = inputStream.getChannel();
        FileChannel outChannel = outputStream.getChannel();
    
        System.out.println(inChannel.size());
        MappedByteBuffer mappedByteBuffer = inChannel.map(MapMode.READ_ONLY, 0, inChannel.size());
    
        System.out.println(mappedByteBuffer.limit());
        System.out.println(mappedByteBuffer.position());
    
        mappedByteBuffer.flip();
        outChannel.write(mappedByteBuffer);
    
        outChannel.close();
        inChannel.close();
        outputStream.close();
        inputStream.close();
    
    }
    
    //基于内存映射这种方式,这么写好像有问题。
    
    
    MappedByteBuffer和RandomAcessFile这两个类要单独重点研究一下。
    
    //TODO 大文件读取

    更多java知识请关注java基础教程栏目。

    以上就是java中如何读取文件?的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:java
    上一篇:java修饰符是什么? 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • java接口可以实现吗• java字节和字符的区别• java修饰符是什么?• java有什么特点
    1/1

    PHP中文网