您的位置:首页 > 编程语言 > Java开发

Java文件操作:RandomAccessFile

2015-04-28 19:05 459 查看
Java提供了一个可以对文件随机访问的操作,访问包括读和写操作。该类名为RandomAccessFile.

1.RandomAccessFile的两种访问模式:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.RandomAccessFile;

/**
* 创建RandomAccessFile
* 两种模式:只读,读写
*
* @author Administrator
*
*/
public class TestRandomAccessFileDemo {
public static void main(String[] args) throws FileNotFoundException {

//      /*
//       * 读取demo.txt
//       * 第二个参数为访问模式:"r"表示只读
//       */
//      RandomAccessFile raf =
//              new RandomAccessFile("demo.txt", "r");
//      File file = new File("demo.txt");
//      raf = new RandomAccessFile(file, "r");

/*
* 创建读写
* FileNotFoundException
* 该异常会在创建RandomAccessFile时抛出
* 情况有两种:
* 1.当我们设置为只读模式时,若指定的文件夹不存在,则会抛出
* 2.读写模式时,当我们写入数据时,若该文件不存在,则会自动创建该文件,若创建不成功则会抛出异常
*
*/
RandomAccessFile raf =
new RandomAccessFile("raf.dat", "r");

}
}


2.写操作

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

/**
* 向文件中写出数据
* @author Administrator
*
*/
public class TestRandomAccessFileDemo2 {
public static void main(String[] args) throws InterruptedException, IOException {
//创建基于raf.dat文件读写的RandomAccessFile
RandomAccessFile raf =
new RandomAccessFile("raf.dat", "rw");

/*
* void write(int d)
* 向文件中写入给定int值的额“低8位”
* int取值在0-255之间有意义
*
* 8位二进制是一个字节
* 32位就是4个字节
*/

int d = 255;
raf.write(d);

raf.write(2);
//操作完毕要关闭释放资源
raf.close();

}
}


3.读操作

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

/**
* 读取文件内容
* @author Administrator
*
*/
public class TestRandomAccessFileDemo3 {
public static void main(String[] args) throws IOException {
RandomAccessFile raf =
new RandomAccessFile("raf.dat", "r");

/*
* int read()
* 从文件中读取一个字节(8位二进制)并以int形式返回
* 这个int值只以低8位奏效,0-255之间
*
* 若返回的int值为-1,则说明EOF(end of file)达到文件末尾了
*/
int d = raf.read();
System.out.println(d);
d = raf.read();
System.out.println(d);

d = raf.read();
System.out.println(d);
raf.close();
}
}


4.将一个字符串写入文件

import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Scanner;

/**
* 将一个字符串写入文件
* @author Administrator
*
*/
public class TestRandomAccessFileDemo4 {
public static void main(String[] args) throws IOException {
/*
* 将字符串写入文件
*
* 问题:
*  1.如何将字符串转换为字节
*  2.如何将一组字节写出
*
*/
RandomAccessFile raf =
new RandomAccessFile("raf2.txt", "rw");

String str = "!!!大家好!才是真的好!";
//      //将字符串按照系统默认的编码集转换为对应的字节
//      //byte[] arr = str.getBytes();
//      /*
//       * 将字符串按照给定的编码集转换为对应的字符串
//       * 编码集的名字不区分大小写
//       */
byte[] arr = str.getBytes();
//      //System.out.println(arr.length);
//
raf.write(arr);
raf.read();

/*
* 编写一个程序
* 从控制台输入内容,将这些内容写入文件中
* 类似记事本的功能
* 1.创建Scanner获取用户输入
* 2.通过Scanner读取一行字符串
* 3.创建一个RandomAccessFile用于创建写文件
* 4.将字符串转换为字节
* 5.通过RandomAccessFile将字节写入文件
* 6.关闭RandomAccessFile
* 7.关闭Scanner
*/

Scanner scanner = new Scanner(System.in);
System.out.println("请输入内容:");
String strInput = scanner.nextLine();
scanner.close();
byte[] arrInput = strInput.getBytes();
raf.write(arrInput);
raf.read(arrInput);

raf.close();
System.out.println("您书写的内容已存入");
}
}


5.使用TestRandomAccessFileDemo实现文件复制

import java.io.IOException;
import java.io.RandomAccessFile;

/**
* 使用TestRandomAccessFileDemo实现文件复制
* @author Administrator
*
*/
public class TestRandomAccessFileDemo5 {
public static void main(String[] args) throws IOException{
/*
* 复制文件:先从源文件读取字节再将这些字节写入另一个文件中
*
* 1.创建一个RandomAccessFile用于读取源文件
* 2.再创建一个RandomAccessFile用于写复制后的文件
* 3.循环读取源文件中的所有字节
* 4.将每个字节写入复制后的文件中
* 5.将两个RandomAccessFile关闭
*/

RandomAccessFile raf =
new RandomAccessFile("test.zip", "r");
RandomAccessFile rafCopy =
new RandomAccessFile("testCopy.zip", "rw");

long start = System.currentTimeMillis();

int d = -1;
while((d=raf.read())!=-1 ){
rafCopy.write(d);
}
long end = System.currentTimeMillis();
System.out.println("共运行:"+(end-start)/1000+"秒");
}
}


6.获取游标位置以及对基本类型进行写操作的方法

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

/**
* 获取游标位置以及对基本类型进行写操作的方法
* @author Administrator
*
*/
public class TestRandomAccessFileDemo6 {
public static void main(String[] args) throws IOException {
RandomAccessFile raf =
new RandomAccessFile("data.dat", "rw");

System.out.println(raf.getFilePointer());//0

raf.write('a');//写一个字节
System.out.println(raf.getFilePointer());//1

//将int的最大值写入文件
raf.writeInt(Integer.MAX_VALUE);
System.out.println(raf.getFilePointer());//5

//连续写了8个字节
raf.writeDouble(3.1415926);
System.out.println(raf.getFilePointer());//13

/*
* RandomAccessFile提供了一个写字符串的方法
* 使用utf-8编码将字符串转换为字节后写出
* void writeUTF(String str)
* writeUTF方法每次会多写两个字节,用于记录当前字符串长度
*/
String str = "你好!";
raf.writeUTF(str);
System.out.println(raf.getFilePointer());//22
String str1 = "切克闹";
raf.writeUTF(str1);
System.out.println(raf.getFilePointer());//33
raf.close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: