当前位置 : IT培训网 > Java开发 > Java教程 > Java编程开发中文件的随机读写

Java编程开发中文件的随机读写

时间:2016-08-31 14:30:00  来源:Java培训网  作者:IT培训网  已有:名学员访问该课程
随机读写是相对顺序读写而言的,所谓随机读写,是指可以在任何时候将存取文件的指针指向文件内容的任何位置。假设存在一个文件尺寸为1024个字节的文件,如果按照顺序存取原则的话,我们只能采用类似于FileStream.read()或者F

随机读写是什么呢,该如何学习这方面内容呢,今天IT培训网小编就来给大家详细介绍一下,Java编程开发中文件的随机读写方面的知识点。

什么是随机读写?

随机读写是相对顺序读写而言的,所谓随机读写,是指可以在任何时候将存取文件的指针指向文件内容的任何位置。假设存在一个文件尺寸为1024个字节的文件,如果按照顺序存取原则的话,我们只能采用类似于FileStream.read()或者FileReader.readLine()的方式来一段一段,或者一行一行地读取,在多数情况下,这样仿佛没有问题。但是,请考虑下面两个场景:

数据不是整体传输,而是分块传输的:请注意,一般意义上的分块传输,数据块到达接收方(或者说被接收方接受下来)的顺序是不可预料的。一般的多线程下载软件(如网络蚂蚁),采取的做法都是启动多个线程分工抓取网络资源文件的不同分段,在此过程中,哪个数据块先被下载软件接受,那块数据后被接受,是不可预料的。

在一个大文件中快速定位:有事,我们很明确自己想读取的内容唉整个文件中的位置,例如,在一个尺寸达到2GB的文件中读取第1024*1024个字节。

以上场景不是顺序存取所擅长的。自然,不是顺序存取完全无能为力,只是代价和效率令人难以接受。

Java.io 包提供了 RandomAccessFile 类用于随机文件的创建和访问。使用这个类,可以跳转到文件的任意位置读写数据。程序可以在随机文件中插入数据,而不会破坏该文件的其他数据。此外,程序也可以更新或删除先前存储的数据,而不用重写整个文件。

RandomAccessFile类是Object类的直接子类,包含两个主要的构造方法用来创 建RandomAccessFile 的对象,如表 10-11 所示。

表 10-11 RandomAccessFile 类的构造方法

构造方法

功能描述

public RandomAccessFile(String name, String mode)

指定随机文件流对象所对应的文件名,以 mode 表示对文件的访问模式

public RandomAccessFile (File file, String mode)

以 file 指定随机文件流对象所对应的文件名,以 mode 表示访问模式

需要注意的是,mode 表示所创建的随机读写文件的操作状态,其取值包括:

•       r:表示以只读方式打开文件。

•       rw:表示以读写方式打开文件,使用该模式只用一个对象即可同时实现读写操作。

表 10-12 列出了 RandowAccessFile 类常用的方法及说明。

表 10-12 RandowAccessFile 的常用方法

方法

功能描述

long length()

返回文件长度

void seek(long pos)

移动文件位置指示器,pos 指定从文件开头的偏离字节数

int skipBytes(int n)

跳过 n 个字节,返回数为实际跳过的字节数

int read()

从文件中读取一个字节,字节的高 24 位为 0,若遇到文件结尾,返回-1

final byte readByte()

从文件中读取带符号的字节值

final char readChar()

从文件中读取一个 Unicode 字符

final void writeChar(inte c)

写入一个字符,两个字节

【例 10-12】模仿系统日志,将数据写入到文件尾部。

//********** ep10_12.java **********

import java.io.*;

class ep10_12{

    public static void main(String args[]) throws IOException{

        try{

            BufferedReader in=new BufferedReader(new InputStreamReader(System.in));

            String s=in.readLine();

            RandomAccessFile myFile=new RandomAccessFile("ep10_12.log","rw");

            myFile.seek(myFile.length());  //移动到文件结尾

            myFile.writeBytes(s+"\n");  //写入数据

            myFile.close();

        }

        catch(IOException e){}

    }

}

程序运行后在目录中建立一个 ep10_12.log 的文件,每次运行时输入的内容都会在该文件内容的结尾处添加。

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
------分隔线----------------------------
Java教程
1、Java 概述
1.1 Java语言概述
1.2 Java虚拟机以及跨平台原理
1.3 Java的主要就业方向
1.4 Java的不同版本
1.5 Java开发环境搭建
1.6 第一个Java程序示例
1.7 Java类和对象的概念
1.8 Java类库及其组织结构
1.9 Java import
2、Java 语法基础
2.1 Java数据类型以及变量的定义
2.2 Java数据类型转换
2.3 Java运算符
2.4 Java流程控制
2.5 Java数组的定义和使用
2.6 Java字符串(String)
2.7 Java StringBuffer与StringBuider
2.8 强调一下编程风格
3、Java 类与对象
3.1 Java类的定义及其实例化
3.2 Java访问修饰符
3.3 Java变量的作用域
3.4 Java this关键字详解
3.5 Java方法重载
3.6 Java类的基本运行顺序
3.7 Java包装类、拆箱和装箱详解
3.8 再谈Java包
3.9 源文件的声明规则
4、Java 继承和多态
4.1 继承的概念与实现
4.2 Java super关键字
4.3 继承中的方法的覆盖和重载
4.4 多态和动态绑定
4.5 instanceof 运算符
4.6 多态对象的类型转换
4.7 Java static关键字
4.8 Java final关键字
4.9 Java Object类
5、面向对象高级特性
5.1 Java内部类及其实例化
5.2 内部类的分类
5.3 抽象类的概念和使用
5.4 接口的概念和使用
5.5 接口和抽象类的区别
5.6 Java 泛型
5.7 泛型通配符和类型参数的范围
6、异常处理
6.1 异常处理基础
6.2 异常类型Java语言中常见的异常类型有哪些
6.3 未被捕获的异常
6.4 try和catch的使用
6.5 多重catch语句的使用
6.6 try语句的嵌套
6.7 throw:异常的抛出
6.8 throws子句
6.9 finally块
6.10 Java的内置异常
6.11 创建自己的异常子类
6.12 断言
7、线程编程
7.1 线程的概念
7.2 Java线程模型
7.3 主线程
7.4 创建线程
7.5 创建多线程
7.6 isAlive()和join()的使用
7.7 线程优先级
7.8 线程同步
7.9 线程间通信
7.10 线程死锁
7.11 线程的挂起、恢复和终止
8、输入输出(IO)操作
8.1 输入输出基本概念
8.2 面向字符的输入流
8.3 面向字符的输出流
8.4 面向字节的输入输出流
8.5 面向字节流的应用
8.6 文件与目录管理
8.7 文件的随机读写
8.8 文件的压缩处理
9、常用类库、向量与哈希
9.1 Java基础类库
9.2 Object类
9.3 Java语言包(java.lang)简介
9.4 日期和时间类
9.5 向量及其应用
9.6 哈希表及其应用
10、图形界面(GUI)设计
10.1 图形界面设计基础
10.2 框架窗口
10.3 标签、按钮和按钮事件
10.4 面板
10.5 布局设计
10.6 文本框和文本区
10.7 文本框和文本区的输入输出
10.8 选择框和单选按钮
10.9 列表和组合框
10.10 菜单
10.11 对话框
10.12 滚动条
10.13 鼠标事件
10.14 键盘事件
11、图形、图像与多媒体
11.1 绘图基础
11.2 设置字型和颜色
11.3 绘图模式
11.4 Graphics类的绘图方法
11.5 Graphics2D类的绘图方法
11.6 图像处理基础
11.7 图像缓冲技术
11.8 多媒体基础
12、网络与数据库编程
12.1 IP地址和InetAddress类
12.2 统一资源定位符
12.3 套接字(Socket)
12.4 数据库连接
12.5 几个重要的类和接口
12.6 数据库查询
12.7 数据库更新
12.8 插入记录
12.9 修改记录
12.10 删除记录