RandomAccessFile:

  翻译过来就是任意修改文件,可以从文件的任意位置进行修改,迅雷的下载就是通过多个线程同时读取下载文件。例如,把一个文件分为四

部分,四个线程同时下载,最后进行内容拼接

public class RandomAccessFile implements DataOutput, DataInput, Closeable {
public RandomAccessFile(String name, String mode);
public RandomAccessFile(File file, String mode);
}

RandomAccessFile实现了DataOutput和DataInput接口,说明可以对文件进行读写

有两种构造方法,一般使用第二种方式

第二个参数mode,有四种模式

代码实例:

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Student { private int id;
private String name;
private int sex;
}
public static void main(String[] args) throws Exception{
String filePath = "D:" + File.separator + "a.txt";
RandomAccessFile accessFile = new RandomAccessFile(new File(filePath), "rw");
Student student = new Student(1004, "sam", 1);
accessFile.writeInt(student.getId());
accessFile.write(student.getName().getBytes());
accessFile.writeInt(student.getSex());
}

打开a.txt:

  发现内容为乱码,这是因为系统只识别ANSI格式的写入,其他格式都是乱码。当然如果你在软件、IDE书写txt文件,打开没有乱码,是因为

已经替我们转格式了。

writeUTF():

public static void main(String[] args) throws Exception{
String filePath = "D:" + File.separator + "a.txt";
RandomAccessFile accessFile = new RandomAccessFile(new File(filePath), "rw");
Student student = new Student(1004, "sam", 1);
// accessFile.writeInt(student.getId());
// accessFile.write(student.getName().getBytes());
// accessFile.writeInt(student.getSex());
accessFile.writeUTF(student.toString());
}

writeUTF()以与系统无关的方式写入,而且编码为utf-8,打开文件:

文件读取:

public static void main(String[] args) throws Exception{
String filePath = "D:" + File.separator + "a.txt";
RandomAccessFile accessFile = new RandomAccessFile(new File(filePath), "rw");
Student student = new Student();
String s = accessFile.readUTF();
System.out.println(s);
}

输出结果:

Student(id=1004, name=sam, sex=1)

这里需要注意,如果是先写文件,然后立刻读取,需要调用accessFile.seek(0);把指针指向首位,因为文件写入最终指针指向末尾了。=

追加内容到末尾:

public static void main(String[] args) throws Exception{
String filePath = "D:" + File.separator + "a.txt";
RandomAccessFile accessFile = new RandomAccessFile(new File(filePath), "rw");
accessFile.seek(accessFile.length());
accessFile.write("最佳内容".getBytes());
}

我们首先把指针移动到文件内容末尾

最新文章

  1. 深入.NET平台的软件系统分成开发(1/6)
  2. display:table-cell介绍
  3. yii2的扩展程序包
  4. python面试题大全(一)
  5. MySQL数据库系统概述
  6. Sqli-labs less 56
  7. 快速启动软件之 Rolan ,你真的会用?
  8. poj1286
  9. 在PyQt4中使用matplotlib
  10. Google Dremel 原理 - 如何能3秒分析1PB
  11. JSP三大指令 六大内置对象
  12. 3.ifconfig
  13. Source Insight相关设置
  14. servlet_1
  15. PHP 网页数据api采集
  16. 实训一(cocos2d-x相关)
  17. 实验二:C基本数据类型及运算
  18. C++异常抛出与捕获及处理
  19. reverse和reverse_copy函数的应用
  20. Maximum Gap——桶排序

热门文章

  1. 解决多次异步请求紊乱问题 - JavaScript
  2. 【转】Android性能优化-过度绘制解决方案
  3. 1.ARC模式下如何兼容非ARC的类
  4. Mybatis用到的设计模式和常用类原理
  5. 异或运算(2014西安网络赛H题)
  6. Codeforces round 419 div2 补题 CF 816 A-E
  7. MySQL-Tool:Navicate 安装
  8. (转)Sql Server 保留几位小数的两种做法
  9. linux中的C里面使用pthread_mutex_t锁(转载)
  10. python 面向对象五 获取对象信息 type isinstance getattr setattr hasattr