- 浏览: 569221 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (206)
- Flask (1)
- JavaScript (3)
- Core Java (41)
- XML (1)
- Oracle (11)
- 软件安装及环境配置 (0)
- 其它 (9)
- 面试/笔试 (5)
- 项目 (0)
- JDBC (11)
- Servlet (4)
- MySql (4)
- JNDI (0)
- Hibernate (11)
- Java模式和构架设计 (0)
- Web设计 (22)
- JSP (8)
- Struts (13)
- Tomcat (2)
- Marven (2)
- SVN (2)
- Swing/AWT (1)
- jQuery (2)
- ExtJS (8)
- Python (22)
- Flex (1)
- Django (7)
- 算法 (5)
- English (1)
- Twisted (1)
- Linux (3)
- Rails (1)
- SVG (3)
- PostgreSQL (1)
文件存取通常是顺序的,每在文件中存取一次,文件的读取位置就会相对于目前的位置前进一次。然而有时必须指定文件的某个区段进行读取或写入的动作,也就是进行随机存取(Random Access),即要能在文件中随意地移动读取位置。这时可以使用RandomAccessFile,使用它的seek()方法来指定文件存取的位置,指定的单位是字节。
为了移动存取位置时的方便,通常在随机存取文件中会固定每一个数据的长度。例如长度固定为每一个学生个人数据,Java中并没有直接的方法可以写入一个固定长度数据(像C/C++中的structure),所以在固定每一个长度方面必须自行设计。先设计一个学生数据的类。
对于每一个学生数据的实例在写入文件时,会固定以34字节的长度写入,也就是15个字符(30字节)加上一个int整数的长度(4字节)。
使用StringBuilder来固定字符长度,可以使用size()方法来取得长度信息。
package io; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.util.Scanner; /** * * @author HaoWang */ public class TestRandomAccessFile { public static void main(String[] args) { Student[] students = { new Student("Justin", 90), new Student("momor", 95), new Student("Bush", 88), new Student("caterpillar", 84)}; try { File file = new File("C:\\a.txt");// 建立RandomAccessFile实例并以读写模式打开文件 RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw"); for(int i = 0; i < students.length; i++) { // 使用对应的write方法写入数据 randomAccessFile.writeChars(students[i].getName()); randomAccessFile.writeInt(students[i].getScore()); } Scanner scanner = new Scanner(System.in); System.out.print("读取第几个数据?"); int num = scanner.nextInt(); // 使用seek()方法操作存取位置 randomAccessFile.seek((num-1) * Student.size()); Student student = new Student(); // 使用对应的read方法读出数据 student.setName(readName(randomAccessFile)); student.setScore(randomAccessFile.readInt()); System.out.println("姓名:" + student.getName()); System.out.println("分数:" + student.getScore()); // 设置关闭文件 randomAccessFile.close(); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("请指定文件名称"); } catch(IOException e) { System.out.println(e.toString()); } } private static String readName(RandomAccessFile randomAccessfile) throws IOException { char[] name = new char[15]; for (int i = 0; i < name.length; i++) { name[i] = randomAccessfile.readChar(); } // 将空字符取代为空格符并返回 return new String(name).replace('\0', ' '); } } class Student { private String name; private int score; public Student() { this("No name",0); } public Student(String name, int score) { this.name = name; this.score = score; } public void setName(String name) { StringBuilder builder = null; if (name != null) { builder = new StringBuilder(name); } else { builder = new StringBuilder(15); } builder.setLength(15); // 最长 15 字符 this.name = builder.toString(); } public void setScore(int score) { this.score = score; } public String getName() { return name; } public int getScore() { return score; } // 每个数据固定写入34字节 public static int size() { return 34; } }
发表评论
-
线程的停止
2010-12-24 00:30 1102既然stop()是不被推荐的 ... -
JDK环境变量的配置
2010-12-19 11:03 923JDK环境变量的配置 (1)JAVA_HOME C:\Pro ... -
自定义异常
2010-12-10 12:09 1154内置异常不可能始终足以捕获所有错误,因此需要用户自定义的异常类 ... -
编写异常的规范
2010-12-10 11:35 1118错误的编码: OutputStreamWriter out ... -
内部类
2010-12-06 16:51 1087内部类详解 1、定义 一个类的定义放在另一个类的内部,这个 ... -
抽象类和接口的区别
2010-12-06 16:47 1018含有abstract修饰符的class 即为抽象类,abstr ... -
人工抛出异常
2010-12-06 16:35 2043Java异常类对象除在程序执行过程中出现异常时由系统自动生成并 ... -
Java异常处理机制
2010-12-06 16:30 10041.Java程序的执行过程中如出现异常,会自动生成一个异常类对 ... -
Java的垃圾回收原理与机制
2010-12-06 16:12 1112JAVA中的对象是在堆上分配,而在堆上分配存储空间的方式是昂贵 ... -
Comparable和Comparator接口
2010-12-06 15:13 1660当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comp ... -
手工打包JAR
2010-12-06 12:57 21911.把准备打包的.java文件集中到一个目录中例如c:\sou ... -
Java集合类
2010-12-03 14:26 1249Collection接口 Collection是 ... -
Java Socket 初步详解
2010-11-08 09:05 1022网络编程的基本模型就 ... -
Java中newString(abc)创建几个对象的解释
2010-11-02 10:04 1840String str=new String("abc ... -
Java日期处理
2010-10-19 17:17 13661.有关日期时间的类 1.java.util.Date ... -
线程同步
2010-10-17 21:17 1039一个方法被synchronized修饰:当程序执行此方法时,当 ... -
线程的状态及生命周期
2010-10-17 20:29 1460线程共有6种状态;在某一时刻只能是这6种状态之一。这些状态由T ... -
sleep()、wait()、yield()、join()方法 浅析
2010-10-17 18:54 1052线程退出最好自己实现,在运行状态中一直检验一个状态,如果这 ... -
利用Externalizable接口实现对象的自定义序列化
2010-10-17 10:12 1257SerializedUser.java import jav ... -
管道流 PiperStream 的应用--------多线程
2010-10-17 10:10 1575TestPiperStream.java import ja ...
相关推荐
NULL 博文链接:https://chaoyi.iteye.com/blog/2083498
File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型字节流、打印流、对象序列化流、字节数组流)、字符流(缓冲字符流、文件字符流、转换流、格式化输出流、字符数组流) 这份代码源码...
本篇文章主要介绍了Java使用RandomAccessFile类对文件进行读写,详细的介绍了RandomAccessFile类的使用技巧和实例应用,有兴趣的可以了解一下
NULL 博文链接:https://baihe747.iteye.com/blog/2124747
*3编写一个Java应用程序,利用RandomAccessFile类,把几个int型整数(1,2,3,4,5,6,7,8,9,10) * 写入到一个名字为tom.dat文件中,然后按相反顺序读出这些数据并显示在屏幕上。(注意,一个int型数据占4个...
13.5 RandomAccessFile类 196 13.6 对象序列化(object serialization) 199 13.6.1 ObjectInput与ObjectOutput 199 13.6.2 ObjectOutputStream 200 13.6.3 ObjectInputStream 200 13.7 巩固练习 201 第...
1.3.10 随机存取文件 RandomAccessFile 1.3.11 小结 1.4 java中的一些常用词汇 1.5 J2SE学习中的30个基本概念 1.6 Java线程 1.7 Java 5.0多线程编程 1.8 Java Socket编程 1.9 Java的内存泄漏 1.10 抽象类与接口的...
1.3.10 随机存取文件 RandomAccessFile 56 1.3.11 小结 56 1.4 java中的一些常用词汇 56 1.5 J2SE学习中的30个基本概念 58 1.6 Java线程 60 1.7 Java 5.0多线程编程 65 1.8 Java Socket编程 80 1.9 Java的内存泄漏 ...
RandomAccessFile_WineryApp 使用JavaFX的Java应用程序使用随机存取存储器读取和写入文件。 包括保存功能,以及视图栏和过滤器选项。
14.2.4 RandomAccessFile应用 14.3 字节流InputStream、OutputStream 14.3.1 字节输入、输出流 14.3.2 字节文件输入、输出流 14.3.3 字节缓冲输入、输出流 14.3.4 字节数据输入、输出流 14.3.5 字节对象输入、...
7.2 RandomAccessFile类 7.3 节点流 7.4 过滤流与包装类 7.5 IO中的高级应用 第8章 图形用户界面GUI(一) 8.1 初识AWT 8.2 AWT线程 8.3 AWT事件处理 8.4 GUI组件上的图形操作 第9章 图形用户界面GUI(二) 9.1 常用AWT...
许多类可帮助完成应用程序中的常见任务。 当前专注于文件的输入和输出。 第一类是Java的RandomAccessFile类的缓冲版本。
7.5.2RandomAccessFile类使用示例——文件加密256 7.6控制台输入和输出257 7.6.1控制台输入类Scanner257 7.6.2格式化输出printf258 7.7序列化261 7.8本章小结264 第4篇Java中的高级技术 第8章Java的多线程...
RandomAccessFile 类对文件可以进行既读又写的操作。 A. 错误 B. 正确 ----------------- 选择:B 9. 文件的存取方式通常有顺序存取、随机存取和索引存取三种方式。 A. 错误 B. 正确 ----------------- 选择:B 10....
8.2 实验1 一个String类的简单应用 8.3 实验2 单词替换和统计问题 8.4 实验3 字符串的比较和查找最长子串 8.5 实验4 单词逆向输出问题 8.6 实验5 ISBN书号校验问题 第9章 Applet小应用程序 9.1 预备知识 9.2 ...
Closeable Closeable 是可以关闭的数据源或目标。 DataInput DataInput 接口用于从二进制流中读取字节,并根据所有...RandomAccessFile 此类的实例支持对随机访问文件的读取和写入。 Reader 用于读取字符流的抽象类。
RandomAccessFile 166 思考作业 166 上机作业 166 提高课外作业 166 第九章 多线程技术 167 基本概念 167 程序 167 进程 167 线程 167 线程和进程的区别 167 进程与程序的区别 168 JAVA中如何实现多线程(重点!!)...
020609_【第6章:面向对象(高级)】_抽象类与接口的应用笔记.pdf 020610_〖第6章:面向对象(高级)〗_实例分析:宠物商店笔记.pdf 020611_【第6章:面向对象(高级)】_Object类笔记.pdf 020612_【第6章:面向对象...
[*]知道使用RandomAccessFile类和seek方法随机存取文件。 机动时间和复习 2课时 <br> 考试 4课时 时间:120-150分钟;其余时间可用于答疑。 题目来源: 大纲...