使用随机文件流类RandomAccessFile将一个文本文件倒置读出

在练习使用随机文件流类RandomAccessFile将一个文本文件倒置读出一个.txt文件时遇到两个问题,特此记录一下

1.读取utf-8编码格式的文件是,前三位会有特殊字符占用。

2.GBK编号一个中文字符占用2个字节,UTF-8编码一个中文字符占用3个字节

//不同编码格式占用字节长度
System.out.println("中".getBytes("UTF-8").length); //3
System.out.println("中".getBytes("GBK").length); //2
System.out.println("中".getBytes("ISO-8859-1").length); //1
System.out.println("。".getBytes("UTF-8").length); //3
		
System.out.println("a".getBytes("UTF-8").length); //1		
System.out.println("a".getBytes("GBK").length); //1        
System.out.println("a".getBytes("ISO-8859-1").length); //1
System.out.println(".".getBytes("UTF-8").length); //1

使用随机文件流类RandomAccessFile将一个文本文件倒置读出

package com.syb.io;

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

/**
 * (十) 使用随机文件流类RandomAccessFile将一个文本文件倒置读出。
 *txt格式使用UTF-8类型保存文件,前三位会有特殊字符占用,需注意
 *UTF-8类型的中文字符占三个字节
 * @author Administrator
 *
 */
public class Lession10 {
	public static void main(String[] args) throws Exception {
		
		String path = "D:/helloword.txt";
		File file = new File(path);
		//定义随机文件流
		RandomAccessFile raf = new RandomAccessFile(file, "r");//"r"表示只读
		StringBuffer sb = new StringBuffer();
		long length = raf.length();
		while(length > 3){
			length--;
			//设置在那个位置发生下一个读取或写入操作
			raf.seek(length);
			int len1 = (char) raf.readByte();
			if(0 <= len1 && len1 <= 128){
				sb.append((char)len1 + "");
			}else{
				length--;
				raf.seek(--length);
				byte[] bytes = new byte[3];
				// bytes被复制为连续3个字节
				raf.readFully(bytes);
				sb.append(new String(bytes));
			}
		}
		System.out.println(sb.toString());
		raf.close();
		
		//不同编码格式占用字节长度
		System.out.println("中".getBytes("UTF-8").length); //3
		System.out.println("中".getBytes("GBK").length); //2
		System.out.println("中".getBytes("ISO-8859-1").length); //1
		System.out.println("。".getBytes("UTF-8").length); //3
		
		System.out.println("a".getBytes("UTF-8").length); //1
		System.out.println("a".getBytes("GBK").length); //1
		System.out.println("a".getBytes("ISO-8859-1").length); //1
		System.out.println(".".getBytes("UTF-8").length); //1
	}
}

 

你可能感兴趣的:(jav,a-io)