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体系,主要解决从数据源读入数据和将数据写入到目的地问题 ...
随机推荐
- g4e基础篇#2 Git分布式版本控制系统的优势
g4e 是 Git for Enterprise Developer的简写,这个系列文章会统一使用g4e作为标识,便于大家查看和搜索. 章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git ...
- 初识BASH SHELL
什么是Shell shell翻译成中文就是"壳"的意思.简单来说就是shell是计算机用户与操作系统内核进行"沟通"的一种工具.Windows系统中有power ...
- 如何实现虚拟机(VirtualBox)中的Ubuntu与Windows XP间的数据共享
环境: 主机是Windows XP系统 虚拟机与Ubuntu的版本分别为: VirtualBox-3.2.12-68302-Win ubuntu-10.10-desktop-i386 前提:已安装Vi ...
- 解决 axios 返回空对象的问题
问题描述:
- 物流包裹一站式查询(TrackingMore)
快递查询接口 目前提供快递查询的接口平台有: Trackingmore 快递100 快递网 不同接口的区别: (1)Trackingmore支持380家快递公司,其中有55家为国内的快递,其余325家 ...
- angular4.0 安装最新版本的nodejs、npm、@angular/cli的方法
在使用ng项目的ui框架时,比如ng-zorro.angular Material,需要安装最新版本的@angular/cli: 配置ng-zorro框架 ng-zorro官网:https://ng. ...
- docker:(5)利用docker -v 和 Publish over SSH插件实现war包自动部署到docker
在 docker:(3)docker容器挂载宿主主机目录 中介绍了运行docker时的一个重要命令 -v sudo docker run -p : --name tomcat_xiao_volume ...
- JQueryPagination分页插件,ajax从struts请求数据
2017-07-16 学完了struts,做了个关于分页的小例子,用到了JQuery分页插件Pagination,先贴下插件下载地址 http://www.jq22.com/jquery-info13 ...
- python函数,模块及eclipse使用
一.eclipse的使用 1.作用 (1)最好用的IDE (2)可调式debug (3)查看可执行过程 (4)可查看源代码 2.安装eclipse及配置 目录安装Pythonpython for ec ...
- C#互操作处理(一)
C#互操作的类型基本位于System.Runtime.InteropServices命名空间下,本系列随笔主要记录本人在开发过程中使用的到一些类型函数.技巧及工具 计算类型的大小 int size = ...