javaIO详解、包含文件以及流操作
1.File 文件操作
java.io.File用来表示文件或者目录。只能用来表示文件或者目录的大小名称等信息,而无法完成对文件内容的CRUD。
1.1构造方法

有四种,当然基本都是根据文件的路径或者直接文件的名字进行创建。注意,此时的创建并非真正意义上的创建。只是在程序中创建了一个File文件。仅此而已。硬盘中并未出现文件。
1.2常用方法
针对文件
1.boolean createNewFile() :用于真正的创建文件。返回值为boolean值。当且仅当成功创建的时候。返回true
2.boolean isFile() :用来判断该File对象是否是文件。
3.boolean exists() :用来判断该File对象是否存在。可以判断目录,也可以判断文件。只要存在,则返回true。不存在,false。因此在创建文件或者目录时,都会实现进行判断,不存在才进行创建。
4.boolean delect():用来删除文件或者目录。成功删除true。删除失败false。当删除一个目录时,注意目录下必须为空目录(也就是没有子项)才能删除。否则删除失败。
5.long length():用来返回File对象所表示的文件的长度,也就是返回字节量。注意。当File对象不代表任何文件时,也就是文件还没有被创建时。该方法返回为0.
针对目录
1.boolean isDirectory():用来判断File对象是否表示一个目录。当然如果该目录没有被创建,那么该方法返回false。只有该File对象调用了创建目录的方法。该方法才返回true。
注意,如果一个File对象已经创建了文件,那么它就不能继续创建成目录。反之也是如此。也就是说,一个File对象。要么创建成文件,要么创建成目录。
2.boolean mkdir():用来创建目录,但是只能一层一层的创建,无法创建多层目录。也就是说,如果父目录没有存在。那么系统会报错。找不到指定的路径。这是因为mkdir无法创建多层目录导致的。也就是说,要想创建多层目录,必须一步一步来,从父目录创建开始,再创建子目录。
3.boolean mkdirs():用来创建多层目录,创建时不需要父目录已存在。但是该方法创建失败时可能已经成功的创建了一部分父目录。因此创建多层目录时建议使用mkdirs。
4.boolean delect():用来删除目录,但是记住,目录必须为空目录。也就是没有子项。也就是说,多层目录的删除,必须从子目录开始,一步一步删除。这个没有多层目录一步删除的方法。
5. File[] listFiles():返回一个File代表的目录下的所有文件和目录。File代表的必须时目录才调用这个方法哟。如果是文件调用这个方法,只会返回null的哟。
除此之外,listFiles()还有一个重载方法,File[] listFiles(FileFilter filter)。实现了FileFilter接口。该接口中有一个accept方法。可以通过重写accept方法来定义自己想要的规则。并根据规则返回文件和目录。

2.文件读写操作。基于RandomAccessFile
在上面讲到的File操作。是对文件目录进行创建删除、查看整体大小名字等整体属性。且不能对文件本身内容进行查看或者修改。接下来介绍一个能够对文件内容进行CRUD的java封装类。RandomAccessFile。它的操作是针对于指针的读写操作。记住,他是针对文件的。于目录无关。
1.构造方法:

可以通过File对象或者文件的具体路径进行创建。然后输入想要进行的模式,分为只读“r" 和读写”rw“.
2.常用方法
2.1读操作read方法。有三种。
1.int read():此方法提供了从指定文件中读取一个字节的方法。并将该字节填充到int值的低八位返回出去。因此该int值为0-255.如果返回值为-1.则表示读取到了文件末尾。每次读取后,指针都会移动一位字节,以待下次读取。
2.int read(byte[] b ):此方法提供了批量读取字节的方法。并将读取到的字节全部放到数组b中。因此,如果数组b的长度足够,那么文件中的所有字节都会存储到b中。如果数组b长度不够,那么只会存储满b。就不会再读取了。返回值为实际读取的字节量。且读取完毕后,指针移动了实际读取的字节量。一定要小心指针的移动。randomaccessFile就是基于指针的移动来读写文件的。因此。在实际编程的过程中。一定要注意指针的移动。要不然就发现很多时候你刚刚写完然后读不出来,就是指针在最后,导致你读不出数据。
这种方法就是缓存的机制。减少对文件的频繁读取操作。而是定义一个数组,每次都将数组填满后再进行读写。节省系统资源。
3.int read(byte[] b ,int off, int len):提供了批量读取字节的方法。将off表示数组b中的偏移量。也就是b中从哪里开始。len 表示 读取的最多字节数。
这里要注意off+len 不能大于 b的长度。要不然会出现数组越界的异常。
2.2写操作write方法,也是有三种
1.void write(int d):该方法表示往指定文件中写入1个字节的方法。是将int类型的低八位写出。文本中看到的是asca码。0-255.。注意指针也会移动
2.void write(byte[] b):该方法表示向指定文件中写入多个字节的方法。很常用。我们一般都会使用这个方法。利用字符的.getbytes方法将字符转化成字节数组。并将其写入文件中。注意,指针也会移动。
3.void write(byte[] b, int offset, int len):该方法表示向指定文件中写入指定数组的部分字节的方法。这个部分是从数组的offset下标开始,持续len个字节。此时也要注意越界的问题。
2.3 close方法
调用完randomAccessFile后,记得使用close方法,关闭且释放系统资源
2.4文件指针操作
我们说过,RandomAccessFile是针对指针进行读写的。接下来介绍一下指针的一些常用方法
1.long getFilePointer():返回当前指针的地址。raf刚创建时。指针默认指向第一个字节。此时该方法返回值为0
2.void seek(long pos) :移动指针到指定位置,该位置为pos。
3.int skipBytes(int n):指针由所在位置跳过n个字节。也就是灵活的调整指针的位置。让指针增加n。
2.5
文件编码
UTF-8编码:中文占用3个字节,英文占用1个字节
GBK编码:中文占用2个字节,英文占用1个字节
UTF-16BE编码:中文占用2个字节,英文占用两个字节
3.java正规IO操作:流

javaIO详解、包含文件以及流操作的更多相关文章
- 详解Google Chrome浏览器(操作篇)(下)
开篇概述 由于最近忙于公司产品的架构与研发,已经三个多月没有写博客了,收到有些朋友的来信,问为什么不及时更新博客内容呢,他们说他们正期待着某些内容.对此,非常抱歉,那么我在此也给各位朋友一些承诺,从即 ...
- 详解Google Chrome浏览器(操作篇)(上)
开篇概述 在上篇博客中详解Google Chrome浏览器(理论篇)一文中,主要讲解了Chrome 搜索引擎使用.Chrome安装和基本操作.Chrome 基本架构.多线程等原理性问题,这篇将重点讲解 ...
- [转]文件IO详解(二)---文件描述符(fd)和inode号的关系
原文:https://www.cnblogs.com/frank-yxs/p/5925563.html 文件IO详解(二)---文件描述符(fd)和inode号的关系 ---------------- ...
- Cookie 详解以及实现一个 cookie 操作库
Cookie 详解以及实现一个 cookie 操作库 cookie 在前端有着大量的应用,但有时我们对它还是一知半解.下面来看看它的一些具体的用法 Set-Cookie 服务器通过设置响应头来设置客户 ...
- MFC中文件对话框类CFileDialog详解及文件过滤器说明
当前位置 : 首页 » 文章分类 : 开发 » MFC中文件对话框类CFileDialog详解及文件过滤器说明 上一篇 利用OpenCV从摄像头获得图像的坐标原点是在左下角 下一篇 Word中为 ...
- 17.3.15---C语言详解FILE文件操作
FILE 是 C语言文件结构定义, 打开文件和文件操作要用到这类结构.可以看成变量类型,用于变量声明.这个是一种数据结构类型,用来表示一个文件的相关信息,如果定义了一个文件指针,就用这个指针来指向某个 ...
- 详解Google Chrome浏览器(操作篇)(一)
开篇概述 在上篇博客中详解Google Chrome浏览器(理论篇)一文中,主要讲解了Chrome 搜索引擎使用.Chrome安装和基本操作.Chrome 基本架构.多线程等原理性问题,这篇将重点讲解 ...
- ***PHP $_FILES函数详解 + PHP文件上传 move_uploaded_file() 参数的正确写法
PHP $_FILES函数详解 在PHP中上传一个文件建一个表单要比ASP中灵活得多.具体的看代码. 如: 复制代码代码如下: <form enctype="multipart/fo ...
- 面试必备:详解Java I/O流,掌握这些就可以说精通了?
@TOC Java IO概述 IO就是输入/输出.Java IO类库基于抽象基础类InputStream和OutputStream构建了一套I/O体系,主要解决从数据源读入数据和将数据写入到目的地问题 ...
随机推荐
- UWP 应用通知Notifications
之前说UWP 使用OneDrive云存储2.x api(二)[全网首发],微识别实现了上传下载的功能,那么为了给用户更上一层楼的体验,那就是在上传下载完成之后,弹出一通知Notifications. ...
- python核心编写视频笔记--模块的导入
1. 模块的重新导入 有这样的一种情况:我们首先创建了一个.py文件,输入模块代码.保存后,我们进入ipython3的环境,引入这个模块.然后再ipython3环境外修改这个模块文件,在ipython ...
- 用C#实现微信“跳一跳”小游戏的自动跳跃助手
一.前言: 前段时间微信更新了新版本后,带来的一款H5小游戏“跳一跳”在各朋友圈里又火了起来,类似以前的“打飞机”游戏,这游戏玩法简单,但加上了积分排名功能后,却成了“装逼”的地方,于是很多人花钱花时 ...
- 讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(中)- IOS不为人知的Bug
前言: 话说昨晚还是前晚,写了一篇:讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(上) 文章写到最后时,多了很多莫名奇妙的问题!!! 为了解决了这些莫名奇妙的问题,我又战斗了2 ...
- iOS获取各种数据方法整理以及IDFA与IDFV使用环境
iOS获取APP版本号: NSString *AppVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBun ...
- 【Bootstrap简单用法】
一.下载及使用 参考网站:http://www.bootcss.com/ 1.使用 BootCDN 提供的免费 CDN 加速服务(同时支持 http 和 https 协议) <!-- 最新版本的 ...
- 记一次电信反射xss的挖掘与利用
0X0.前言 早上起床,打开手机习惯性刷刷新闻,却发现网络无法连接,本以为是光猫出现了问题,后来发现是忘记续费,欠费了. 在网上充值完之后,等了有将近十分钟,网依旧没恢复.随打了个电话给客服,客服在后 ...
- Centos6.4三种更改hostname的方法之间的对比
首先,利用hostname命令查看一下当前主机的主机名,在终端输入hostname,会发现显示的是完整的主机名称(主机名.域名),其中主机名与进入终端后:登录名@主机名,显示的一致,如下图所示: 其次 ...
- (译)Web是如何工作的:给Web开发新手的初级读物
原文地址:https://medium.freecodecamp.org/how-the-web-works-a-primer-for-newcomers-to-web-development-or- ...
- 【线段树】BZOJ2752: [HAOI2012]高速公路(road)
2752: [HAOI2012]高速公路(road) Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1621 Solved: 627[Submit] ...