Java FileChannel文件的读写实例

这篇具有很好参考价值的文章主要介绍了Java FileChannel文件的读写实例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述:

文件通道FileChannel是用于读取,写入,文件的通道。FileChannel只能被InputStream、OutputStream、RandomAccessFile创建。使用fileChannel.transferTo()可以极大的提高文件的复制效率,他们读和写直接建立了通道,还能有效的避免文件过大导致内存溢出。

获取FileChannel的方法:

1、获取通道的一种方式是对支持通道的对象调用getChannel()方法。支持通道的类如下:

  • FileInputStream
  • FileOutputStream
  • RandomAccessFile
  • DatagramSocket
  • Socket
  • ServerSocket

2、获取通道的其他方式是使用Files类的静态方法newByteChannel()获取字节通道。或通过通道的静态方法open()打开并返回指定通道

二、FileChannel的常用方法

int read(ByteBuffer dst) 从Channel当中读取数据至ByteBuffer
long read(ByteBuffer[] dsts)将channel当中的数据“分散”至ByteBuffer[]
int write(Bytesuffer src)将ByteBuffer当中的数据写入到Channel
long write(ByteBuffer[] srcs)将Bytesuffer[]当中的数据“聚集”到Channel
long position()返回此通道的文件位置
FileChannel position(long p)设置此通道的文件位置
long size()返回此通道的文件的当前大小
FileChannel truncate(long s)将此通道的文件截取为给定大小
void force(boolean metaData)强制将所有对此通道的文件更新写入到存储设备中

三、案例

1-本地文件写数据

  @Test
    public void writeFile(){
        try {
            //1.字节输出流通向目标文件
            FileOutputStream fos = new FileOutputStream(new File("test.txt"));
            //2.得到字节输出流对应的通道Channel
            FileChannel channel = fos.getChannel();
            //3.分配缓存区
            ByteBuffer bf = ByteBuffer.allocate(1024);
            bf.put("tom is a hero".getBytes());
            //4.把缓存区切换为写模式
            bf.flip();
            //5.输出数据到文件
            channel.write(bf);
            channel.close();
            System.out.println("完成数据写入..........");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

Java FileChannel文件的读写实例

2-本地文件读数据

 @Test
    public void readFile(){
        try {
            //1.定义一个文件字节输入流与源文件接通
            FileInputStream fos = new FileInputStream(new File("test.txt"));
            //2.需要得到文件字节输入流的文件通道
            FileChannel channel = fos.getChannel();
            //3.定义一个缓存区
            ByteBuffer bf = ByteBuffer.allocate(1024);
            //4.读取数据到缓存区
            channel.read(bf);
            //5、归位
            bf.flip();
            //6.读取出缓存区中的数据并输出即可
            String s = new String(bf.array(), 0, bf.remaining());
            channel.close();
            System.out.println("读取内容.........." + s);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

3-快速拷贝文件

@Test
    public void copyFile(){
        try {
            long starTime = System.currentTimeMillis();
            //1、创建输入文件流
            FileInputStream fis = new FileInputStream(new File("test.txt"));
            //2、得到输入channel
            FileChannel fisChannel = fis.getChannel();
            //3、创建输出文件流
            FileOutputStream fos = new FileOutputStream(new File("test2.txt"));
            //4、得到输出channel
            FileChannel fosChannel = fos.getChannel();
            //5、使用输入channel将文件转到fosChannel
            fisChannel.transferTo(0, fisChannel.size(), fosChannel);
            fis.close();
            fos.close();
            fisChannel.close();
            fosChannel.close();
            long endTime = System.currentTimeMillis();
            System.out.println("耗时=" + (endTime - starTime) + "ms");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

四、源码下载

https://gitee.com/charlinchenlin/store-pos文章来源地址https://www.toymoban.com/news/detail-413563.html

到了这里,关于Java FileChannel文件的读写实例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java文件读写数据流

    以下这几个类都是抽象类.并且都有对于文件操作的具体实现类.File+类名就是具体的实现类 1.1.1.InputStream 以二进制方式读.有两个主要方法. 1.read(); 该方法有三个版本 无参: read() 读取一个字节的数据,返回 -1 表示读取结束 一个参数: read(byte[] b) 最多读取 b.length 字节的数据到 b

    2024年02月16日
    浏览(41)
  • 基于fpga的ddr3读写控制,纯verilog实现,能实现多通道图像数据读写控制

    基于fpga的ddr3读写控制,纯verilog实现,能实现多通道图像数据读写控制,模块接口清晰,可移植性高. 基于FPGA的DDR3读写控制是一项重要的技术,它为多通道图像数据的读写提供了高效的解决方案。本文将介绍一种纯Verilog实现的DDR3读写控制模块,旨在实现模块接口清晰、可移

    2024年04月12日
    浏览(55)
  • android java读写yaml文件

    目录 申请读写权限: build.gradle中添加库引用: android java读写yaml文件 java修改yaml文件 YamlFile: 修改yaml文件方法2 Yaml: 删除值:     uses-permission android:name=\\\"android.permission.WRITE_EXTERNAL_STORAGE\\\" /     uses-permission android:name=\\\"android.permission.READ_EXTERNAL_STORAGE\\\" / 写文件可以参考下面的:

    2024年02月09日
    浏览(35)
  • 【Java 编程】文件操作,文件内容的读写—数据流

    平时说的文件一般都是指存储在 硬盘 上的普通文件 形如 txt, jpg, mp4, rar 等这些文件都可以认为是普通文件,它们都是在硬盘上存储的 在计算机中,文件可能是一个 广义的概念 ,就不只是包含普通文件,还可以包含 目录 (把目录称为目录文件) 操作系统中,还会使用文件来描

    2023年04月08日
    浏览(47)
  • java中 Excel文件解析及超大Excel文件读写

    本文主要对Excel中数据的解析和生成进行总结                   在应用程序的开发过程中,我们经常要用到Excel进行数据的导入或导出。所以,在通过Java语言实现此类需求时,通常会对Excel文件进行解析或生成。   1,概述             在应用程序开发过程中,经常需

    2024年02月07日
    浏览(37)
  • Java 中如何实现文件的读写操作?(十六)

    在Java中,文件I/O(输入/输出)操作是一项非常基础的任务。在Java中,可以使用File和FileInputStream、FileOutputStream、BufferedReader、PrintWriter等类来进行文件读写操作。 文件读取 在Java中,可以使用FileInputStream和BufferedReader类来读取文件。 FileInputStream: FileInputStream是一个用于从文件

    2024年02月02日
    浏览(34)
  • Java IO:文件读写、流操作与常用技巧

    Java IO流指的是Java输入输出流,用于处理与文件、网络等设备之间的数据传输。Java提供了 InputStream 和 OutputStream 两个抽象类作为所有输入输出流类的基类,以及 Reader 和 Writer 两个抽象类作为所有 字符 输入输出流类的基类。同时,Java还提供了许多具体的输入输出流类和字符输

    2024年02月04日
    浏览(40)
  • java利用缓冲区及流式对大文件进行高效读写

    当处理大文件时,使用适当的技术和方法可以提高读写性能和效率。下面是一些针对大文件读写的示例说明: 字符流 缓冲区及分块读写  BufferedInputStream 和 BufferedOutputStream 大文件读取: try (FileInputStream fis = new FileInputStream(\\\"largefile.txt\\\");      BufferedInputStream bis = new BufferedInp

    2024年02月07日
    浏览(39)
  • Photoshop如何使用通道之实例演示?

      因科研等多场景需要进行绘图处理,笔者对PS进行了学习,本文通过《Photoshop2021入门教程》及其配套素材结合网上相关资料进行学习笔记总结,本文对通道使用进行阐述。    最终结果图       (1)准备素材       (2)将素材导入PS       (3)执行“图层

    2024年02月02日
    浏览(31)
  • Java读写文件时的GBK和UTF8转换问题

    文件中的文本以UTF-8的编码方式存储,在Java程序中以GBK的编码方式从文件中读入,最后再将读入的内容转换为UTF-8编码,即 UTF-8 -- GBK -- UTF-8 。这种操作方式能正确读入文件中的内容吗? 因为本文主要讨论不同的编码之间的转换问题,所以有必要先介绍一下文中会用到的几种

    2024年02月07日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包