1 package com.javaio.study; 2 3 import java.io.File; 4 import java.io.FileNotFoundException; 5 import java.io.IOException; 6 import java.io.RandomAccessFile; 7 import java.util.Arrays; 8 9 /** 10 * 使用RandomAccessFile对文件进行读写操作 11 * @author chen 12 * 13 */ 14 public class Raf { 15 16 /** 17 * 创建新文件 18 * @return 19 * @throws IOException 20 */ 21 private File createFile() throws IOException{ 22 23 File file = null; 24 File demo = new File("demo"); 25 if(!demo.exists()){ 26 demo.mkdir(); 27 } 28 file = new File(demo, "raf.dat"); 29 if(!file.exists()){ 30 file.createNewFile(); 31 } 32 return file; 33 34 } 35 36 /** 37 * 使用RandomAccessFile写文件 38 * @param file 39 * @throws IOException 40 */ 41 private void rafWrite(File file) throws IOException{ 42 43 if(file != null && file.exists()){ 44 45 RandomAccessFile raf = new RandomAccessFile(file, "rw");//以读写的方式打开文件 46 //指针的文职 47 System.out.println(raf.getFilePointer()); 48 raf.write(‘A‘);//只写了一个字节 49 System.out.println(raf.getFilePointer()); 50 raf.write(‘B‘); 51 System.out.println(raf.getFilePointer()); 52 53 int i = 0x7fffffff; 54 //用write方法每次只写一个字节,如果要把i写进去就要写4次 55 raf.write(i >>> 24);//高8位 56 raf.write(i >>> 16); 57 raf.write(i >>> 8); 58 raf.write(i); 59 System.out.println(raf.getFilePointer()); 60 61 //可以直接写一个int 62 raf.writeInt(i); 63 64 String s = "中"; 65 byte[] gbk = s.getBytes("UTF-8"); 66 raf.write(gbk); 67 System.out.println(raf.length()); 68 69 raf.close();//关闭 70 } 71 72 } 73 74 /** 75 * 使用RandomAccessFile读文件 76 * @param file 77 * @throws IOException 78 */ 79 private void rafReader(File file) throws IOException{ 80 81 if(file != null && file.exists()){ 82 83 RandomAccessFile raf = new RandomAccessFile(file, "rw");//以读写的方式打开文件 84 //读文件,必须把指针移到头部 85 raf.seek(0); 86 //一次性读取,把文件中的内容都读到字节数组中 87 byte[] buf = new byte[(int)raf.length()]; 88 raf.read(buf); 89 System.out.println(Arrays.toString(buf)); 90 91 String s = new String(buf, "UTF-8"); 92 System.out.println(s); 93 94 for(byte b: buf){ 95 System.out.print(Integer.toHexString(b & 0xff) + " "); 96 } 97 98 raf.close();//关闭 99 } 100 101 } 102 103 public static void main(String[] args) throws IOException { 104 105 Raf raf = new Raf(); 106 File file = raf.createFile(); 107 raf.rafWrite(file); 108 raf.rafReader(file); 109 110 } 111 112 }
时间: 2024-10-11 04:20:05