[java]代码库
package fengke.filedemo;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
/**
* RandomAccessFile
*
* @author 锋客
* 内容:
* 1.RandomAccessFile不会创建文件,需要和File配合使用
* 2.可以实现文件的复制
* 3.乱码问题的解决:
*/
public class RandomAccessFileSeriaDemo {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
File demo = new File("demo1");
if (!demo.exists())
demo.mkdir();
File file1 = new File(demo, "raf.dat");
if (!file1.exists())
file1.createNewFile();
// 打开文件,进行随机读写
RandomAccessFile rf = new RandomAccessFile(file1, "rw");
for (int i = 0; i < 10; i++) {
// 写入基本类型double数据
rf.writeDouble(i * 1.414);
}
rf.close();
rf = new RandomAccessFile("rtest.dat", "rw");
// 直接将文件指针移到第5个double数据后面
rf.seek(5 * 8);
// 覆盖第6个double数据 ======》i<6
rf.writeDouble(47.0001);
rf.close();
rf = new RandomAccessFile("rtest.dat", "r");
// 读取数据
for (int i = 0; i < 6; i++) {
System.out.println("Value " + i + ": " + rf.readDouble());
}
RandomAccessFile file = new RandomAccessFile("file", "rw");
// 以下向file文件中写数据
file.writeInt(20);// 占4个字节
file.writeDouble(8.236598);// 占8个字节
file.writeUTF("这是一个UTF字符串");// 这个长度写在当前文件指针的前两个字节处,可用readShort()读取
file.writeBoolean(true);// 占1个字节
file.writeShort(395);// 占2个字节
file.writeLong(2325451l);// 占8个字节
file.writeUTF("又是一个UTF字符串");
file.writeFloat(35.5f);// 占4个字节
file.writeChar('a');// 占2个字节
file.seek(0);// 把文件指针位置设置到文件起始处
// 以下从file文件中读数据,要注意文件指针的位置
System.out.println("——————从file文件指定位置读数据——————");
System.out.println(file.readInt());
System.out.println(file.readDouble());
System.out.println(file.readUTF());
file.skipBytes(3);// 将文件指针跳过3个字节,本例中即跳过了一个boolean值和short值。
System.out.println(file.readLong());
file.skipBytes(file.readShort()); // 跳过文件中“又是一个UTF字符串”所占字节,注意readShort()方法会移动文件指针,所以不用加2。
System.out.println(file.readFloat());
// 以下演示文件复制操作
System.out.println("——————文件复制(从file到fileCopy)——————");
// 先得有接收文件,才能查看到实际结果
File file_copy = new File("e:\\fileCopy.txt");
file_copy.createNewFile();
file.seek(0);
RandomAccessFile fileCopy = new RandomAccessFile("e:\\fileCopy.txt", "rw");
int len = (int) file.length();// 取得文件长度(字节数)
byte[] b = new byte[len];
file.readFully(b);
fileCopy.write(b);
System.out.println("文件路径:" + file_copy.getAbsolutePath());
System.out.println("复制完成!");
fileCopy.seek(0);// 这句话很重要,是查询的基础
// 查看复制是否完成,必須有fileCopy.seek(0);
System.out.println(fileCopy.readInt());
System.out.println(fileCopy.readDouble());
System.out.println(fileCopy.readUTF());
fileCopy.close();
file.close();
}
}