热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

IO流(三)——NIO

前言 之前已经讲过IO流中字节流和字符流对文件读写及复制的操作,有兴趣的伙伴可以参看IO流(一) —— 字节流IO流(二) —— 字符流 这节就让我们来了解下NIO对文件的读,写及复制的操作吧。我

前言

之前已经讲过IO流字节流字符流对文件读写及复制的操作,有兴趣的伙伴可以参看
IO流(一) —— 字节流
IO流(二) —— 字符流
这节就让我们来了解下NIO对文件的读,写及复制的操作吧。我将NIO对于文件的读,写和复制封装到了一个类NIOStreamUtil中,下面让我们来了解下它的使用。

今天涉及的内容:

  1. NIOStreamUtilStreamUtil主要功能简介
  2. NIOStreamUtil功能详解
  3. NIOStreamUtilMainActivity中使用
    3.1 使用前的准备
    3.2 NIOStreamUtilMainActivity中使用
  4. 效果图及项目结构图
  5. NIOStreamUtilStreamUtil源码

先来波效果图

IO流(三) —— NIO
2.gif

一. NIOStreamUtil及StreamUtil主要功能简介

  • NIOStreamUtil主要用于处理字符串文件的读写,以及文件的拷贝,使用的是nio知识对文件进行处理,效率比传统的IO流要高.NIO要求jdk 1.7+
  • StreamUtil是一个io流工具类,主要是为了辅助ByteStreamUtil的使用,其包含各种流对象的关闭方法,以及各种字符编码格式。

二. NIOStreamUtil功能详解

NIOStreamUtil主要包含以下几个方法:

/** * nio读文件的方式一 * @param filePath 文件路径 * @param charsetName 字符编码格式,如:StreamUtil.UTF_8,StreamUtil.GBK 等. * 此参数为null时,返回编译器默认编码格式 * @return 读出的文件内容 */ public static String readFile1(String filePath, String charsetName) /** * nio读文件的方式二 * @param filePath 文件路径 * @param charsetName 字符编码格式,如:StreamUtil.UTF_8,StreamUtil.GBK 等. * 此参数为null时,返回编译器默认编码格式 * @return 读出的文件内容 */ public static String readFile2(String filePath, String charsetName) /*** * 将文件读成 byte 数组 * * @param filePath 文件路径 * @return 文件的字节数组 */ public static byte[] getBytes(String filePath) /** * NIO 写文件 * * @param message 要写入文件的字符串 * @param filePath 文件路径 * @param charsetName 字符编码格式,如:StreamUtil.UTF_8,StreamUtil.GBK 等. * 此参数为null时,返回编译器默认编码格式 * @param append true:表示在文件中追加内容, false:表示在文件中写新内容,覆盖以前内容 * @return true:写文件成功 false:写文件失败 */ public static boolean writeFile(String message,String filePath,String charsetName,boolean append) /** * NIO复制文件 * * @param readFilePath 要复制的文件路径 * @param writeFilePath 新生成的文件路径 * @return true:复制成功 false:复制失败 */ public static boolean copyFile(String readFilePath,String writeFilePath)

三.NIOStreamUtil在MainActivity中使用

3.1 使用前的准备

先在androidmanifast.xml中添加文件读写权限,如下:

然后要给项目添加FileProvider的处理权限,最后还要加Android6.0+的手动权限,这些都是老生常谈,具体的大家可以参考
RetroHttp使用记录
中关于权限处理的介绍,然后手动权限库,大家可以参考
PermissionsDispatcher动态权限申请
这些都不是今天讲解的重点,所以就不多赘述了,下面继续开讲。

3.2 NIOStreamUtil在MainActivity中使用

NIOStreamUtilMainActivity中使用代码如下:

public class MainActivity extends AppCompatActivity implements View.OnClickListener { private TextView mTextView; private TextView mTextView1; private ImageView mImv; private Button mButton1; private Button mButton2; private Button mButton3; private Button mButton4; private static final int PERMISSION_CODE=1234; private static final String mFilePath="/data/data/com.testdemo/cache/demo.txt"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView1=findViewById(R.id.tv1); mImv=findViewById(R.id.imv); mButton1=findViewById(R.id.btn1); mButton2=findViewById(R.id.btn2); mButton3=findViewById(R.id.btn3); mButton4=findViewById(R.id.btn4); //设置监听 setListener(); //申请权限 requestPermission(MainActivity.PERMISSION_CODE); } private void requestPermission(int requestCode) { String permissions[] = { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; PermissionHelper.getInstance().checkPermissions(permissions, requestCode, MainActivity.this); } @PermissionSuccess(requestCode = MainActivity.PERMISSION_CODE) public void requestSuccess() { //申请到权限后的处理 //...... LogUtil.i("=====权限申请成功======"); } @PermissionFail(requestCode = MainActivity.PERMISSION_CODE) public void requestFail() { //未获取到权限的处理 //...... LogUtil.i("=====权限申请失败======"); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) { PermissionHelper.getInstance().onRequestPermissionsResult(requestCode, permissions, grantResults); } private void setListener(){ mButton1.setOnClickListener(this); mButton2.setOnClickListener(this); mButton3.setOnClickListener(this); mButton4.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn1://写文件 writeText(); break; case R.id.btn2://读文件 readText(); break; case R.id.btn3://复制文件 copyText(); break; case R.id.btn4://读图片 readImage(); break; default: break; } } /**写文件**/ private void writeText(){ String message="王者荣耀,亚瑟:圣剑啊,我的盾在哪里?n" + "apKGepn" + "请关注我微信公众号:Android进击n" + "9527n" + "请关注我简书,奔跑的佩恩,谢谢啦!"; boolean flag= NIOStreamUtil.writeFile(message,mFilePath, StreamUtil.UTF_8,false); LogUtil.i("====是否写文件成功===flag="+flag); ToastUtil.shortShow("====是否写文件成功===flag="+flag); } /**读文件**/ private void readText(){ String message=NIOStreamUtil.readFile1(mFilePath,StreamUtil.UTF_8); LogUtil.i("=======读出内容===message="+message); if(StringUtil.isNotEmpty(message)){ mTextView1.setText("读出内容为: "+message); }else{ mTextView1.setText("没读出内容"); } } /**复制文件**/ private void copyText(){ String copyFilePath="/data/data/com.testdemo/cache/copy.txt"; boolean flag=NIOStreamUtil.copyFile(mFilePath,copyFilePath); LogUtil.i("===是否复制成功===flag="+flag); ToastUtil.shortShow("===是否复制成功===flag="+flag); } /**读图片**/ private void readImage(){ String path="/data/data/com.testdemo/cache/1.jpg"; byte bytes[]=NIOStreamUtil.getBytes(path); if(bytes!=null){ Bitmap bitmap= BitmapFactory.decodeByteArray(bytes,0,bytes.length); mImv.setImageBitmap(bitmap); } } }

四.效果图及项目结构图

IO流(三) —— NIO
2.gif

IO流(三) —— NIO
image.png

五. NIOStreamUtil及StreamUtil源码

NIOStreamUtil源码如下:


推荐阅读
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文由编程笔记#小编整理,主要介绍了关于数论相关的知识,包括数论的算法和百度百科的链接。文章还介绍了欧几里得算法、辗转相除法、gcd、lcm和扩展欧几里得算法的使用方法。此外,文章还提到了数论在求解不定方程、模线性方程和乘法逆元方面的应用。摘要长度:184字。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
author-avatar
zf19920222
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有