1. 程式人生 > >Java基礎【08】常用API——RandomAccessFile相關API

Java基礎【08】常用API——RandomAccessFile相關API

java.io.RandomAccessFile:專門用來讀寫檔案資料的類,其讀寫是基於指標進行的,即RAF總是在指標指向位置讀取或者寫出位元組。 RAF有兩種常用的模式:  * r:只讀模式,只能讀取檔案資料,不可以做寫操作。  * rw:讀寫模式,即可讀也可寫。

1.寫出資料:void write(int d)

package raf;

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

public class RandomAccessFileDemo {
	public static void main(String[] args) throws IOException {
		/*
		 * 對專案目錄下的檔案test.dat檔案進行讀寫操作
		 * 
		 * RandomAccessFile(String path, String mode)
		 * RandomAccessFile(File file, String mode)
		 */
		RandomAccessFile raf 
			= new RandomAccessFile("test.dat", "rw");
		System.out.println("raf已建立!");
		
		/*
		 * void write(int d)
		 * 該方法可以向檔案中寫入一個位元組,寫入的是
		 * 給定的int值所對應的2進位制的"低八位". 
		 *                            vvvvvvvv
		 * 00000000 00000000 00000001 00000001
		 */
		raf.write(1);		
		System.out.println("寫出完畢!");
		
		raf.close();
		
	}
}

2.讀取資料:int read()

package raf;

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

/**
 * 從檔案中讀取一個位元組
 * @author adminitartor
 */
public class ReadDemo {
	public static void main(String[] args) throws IOException {
		RandomAccessFile raf = new RandomAccessFile("test.dat", "r");
		/*
		 * int read()
		 * 從檔案中讀取1個位元組,並以int形式返回。若返回
		 * 值為-1,則表示檔案讀取到末尾了
		 * 00000000 00000000 00000000 00000001
		 */
		int d = raf.read();
		System.out.println(d);
		
		d = raf.read();
		System.out.println(d);
		
		raf.close();
	}
}

3.demo——檔案複製

package raf;

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

/**
 * 檔案複製操作
 * @author adminitartor
 */
public class CopyDemo {
	public static void main(String[] args) throws IOException {
		/*
		 * 1:建立一個RAF用於讀取原檔案
		 * 2:建立一個RAF用於寫入複製檔案
		 * 3:迴圈從原檔案讀取每一個位元組並寫入到複製檔案
		 *   中完成copy工作
		 */
		//1
		RandomAccessFile src
			= new RandomAccessFile("img.jpg", "r");
		//2
		RandomAccessFile desc
			= new RandomAccessFile("img_cp.jpg","rw");
		//3
		int d = -1;
		while((d = src.read())!=-1){
			desc.write(d);
		}
		System.out.println("複製完畢!");
		src.close();
		desc.close();
	}
}