Java之RandomAccessFile小结
今天跟大家分享一下javase中的关于I/O的操作:
有时我们需要在文件的末尾追加一些内容,在这时用RandomAccessFile就很好。
这个类有两个构造方法:
RandomAccessFile(File file, 创建从中读取和向其中写入(可选)的随机访问文件流,该文件由 File 参数指定。 |
RandomAccessFile(String name, 创建从中读取和向其中写入(可选)的随机访问文件流,该文件具有指定名称。 |
其中mode 参数指定用以打开文件的访问模式。允许的值及其含意为:
"r" 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。
"rw" 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。
"rws" 打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。
"rwd" 打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。
"rws" 和 "rwd" 模式的工作方式极其类似 FileChannel 类的 force(boolean) 方法,分别传递 true 和
false 参数,除非它们始终应用于每个 I/O
操作,并因此通常更为高效。如果该文件位于本地存储设备上,那么当返回此类的一个方法的调用时,可以保证由该调用对此文件所做的所有更改均被写入该设备。
这对确保在系统崩溃时不会丢失重要信息特别有用。如果该文件不在本地设备上,则无法提供这样的保证。
"rwd" 模式可用于减少执行的 I/O 操作数量。使用 "rwd" 仅要求更新要写入存储的文件的内容;使用 "rws" 要求更新要写入的文件内容及其元数据,这通常要求至少一个以上的低级别 I/O 操作。
如果存在安全管理器,则使用 file 参数的路径名作为其参数调用它的 checkRead 方法,以查看是否允许对该文件进行读取访问。如果该模式允许写入,那么还使用该路径参数调用该安全管理器的 checkWrite 方法,以查看是否允许对该文件进行写入访问。
如果要在文件的结束点追加内容,那就用第一个构造方法,调用RandomAccessFile的seek(long lg)方法,该方法传递进去一个long型的数据,我们正好可以把file.length()传递进去,这样就按照要求在文件末尾追加内容。
但这里可能会遇到了乱码问题,如果用的RandomAccessFile的
writeBytes(String s)方法写入内容,就会出现乱码,所以最好是用write(byte[] b)方法,例如:String s =
"中文";
raf.write(s.getBytes());这样就很好的解决了乱码问题。关于这两种方法,许多人认为好像差不多,其实是完全相反的方
式,writeBytes(String s)方法将中文拆成两个字节写进文本,所以会造成乱码,write(byte[]
b)方法是将每两个字节合成一个中文并写时文本,所以不会出现乱码。
我们还可以调用writeUTF(String str)方法避免乱码。
结下来还有一个解决换行的问题,写了“/n”不管用啊。实际上要用“/r/n”才行。
“/r”即回车,回到一行的开头。“/n”即换行,另起一行。这大家都是知道的。
我们在程序里写文件的时候所谓的“回车符”确切的说应该是“回车换行符”。
在windows系统下,回车换行符号是“/r/n”,但是在Linux等系统下是没有“/r”符号的,我们一般都是在window下,所以说在用程序写文件是应该是“/r/n”才对。
补充:为了适应跨平台需求,建议回车换行用System.getProperty("line.separator")。
Java之RandomAccessFile小结的更多相关文章
- Java的RandomAccessFile
Java的RandomAccessFile提供对文件的读写功能,与普通的输入输出流不一样的是RamdomAccessFile可以任意的访问文件的任何地方.这就是“Random”的意义所在. Rando ...
- java并发包小结(二)
接上一篇 java并发包小结(一):http://blog.csdn.net/aalansehaiyang52/article/details/8877579 Future 接口Future 接口允许 ...
- Java IO RandomAccessFile 任意位置读/写
随机读写类 RandomAccessFile的唯一父类是Object,与其他流父类不同.是用来访问那些保存数据记录的文件的,这样你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必 ...
- java IO 流小结
java IO 流小结 java流类图结构 流的分类 按方向 输入流 输出流 按类型 字节流 字符流 结论:只要是处理纯文本数据,就优先考虑使用字符流. 除此之外都使用字节流.
- Java使用RandomAccessFile读写文件
目录 转载自:http://blog.csdn.net/akon_vm/article/details/7429245 Java RandomAccessFile RandomAccessFile是用 ...
- 小白学Java:RandomAccessFile
目录 小白学Java:RandomAccessFile 概述 继承与实现 构造器 模式设置 文件指针 操作数据 读取数据 read(byte b[])与read() 追加数据 插入数据 小白学Java ...
- Java IO: RandomAccessFile
原文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) RandomAccessFile允许你来回读写文件,也可以替换文件中的某些部分.FileIn ...
- 使用java.io.RandomAccessFile更改文本文件的内容
原文本内容: 2020-01-21 08:31:08.520 [main] INFO logbackCfg.App -秦时明月汉时关 2020-01-21 08:31:08.521 [main] ER ...
- java单向加密算法小结(2)--MD5哈希算法
上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...
随机推荐
- Phonegap 原生控件(Android)与html混合
1. 用命令创建cordova项目 cordova coreate hello com.example.hello hello 2.打开MainActivity 在onCreate方法中加入 setC ...
- Tomcat 性能优化(连接数、线程、JVM、dir)
Tomcat的server.xml中Context元素的以下参数应该怎么配合适 <Connector port="8080" maxThreads="150&quo ...
- ACM-Team Tic Tac Toe
我的代码: #include <bits/stdc++.h> using namespace std; int main() { char a[3][3]; int i,j=0; for( ...
- win和linux下控制台界面中停顿X秒的方式
win localhost > nul linux
- Web服务的实质介绍
web应用的实质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端 Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用 ...
- 安装face_recognition
Ubuntu安装face_recognition需要先安装dlib 1.安装dlib的依赖 sudo apt-get install build-essential cmake sudo apt-ge ...
- 224. Basic Calculator + 227. Basic Calculator II
▶ 两个四则表达式运算的题目,第 770 题 Basic Calculator IV 带符号计算不会做 Orz,第 772 题 Basic Calculator III 要收费 Orz. ▶ 自己的全 ...
- SC命令安装window服务
sc create Styler binpath= "D:\Styler\Styler.exe" start= auto displayname= "Styler&quo ...
- UGUI 锚点设置为四方扩充模式然后设置局部坐标为0将出现什么问题
UGUI 锚点设置为四方扩充模式然后设置局部坐标为0将出现什么问题? 情形:按钮A挂在主画布上.四方扩充模式.A的中心和画面中心不重合. 这时候用代码设置A.localPosition = new V ...
- MyBatis 查询缓存
增删改操作对一级缓存的影响:增删改操作都会清空一级缓存,无论是否提交