在练习使用随机文件流类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
}
}