文档章节

使用RandomAccessFile类-解决readLine乱码问题

吐槽的达达仔
 吐槽的达达仔
发布于 2014/12/05 22:17
字数 508
阅读 64
收藏 0

RandomAccessFile

RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了。这些记录的大小不必相同;但是其大小和位置必须是可知的。但是该类仅限于操作文件。

RandomAccessFile不属于InputStream和OutputStream类系的。实际上,除了实现DataInput和DataOutput接口之外(DataInputStream和DataOutputStream也实现了这两个接口),它和这两个类系毫不相干,甚至不使用InputStream和OutputStream类中已经存在的任何功能;它是一个完全独立的类,所有方法(绝大多数都只属于它自己)都是从零开始写的。这可能是因为RandomAccessFile能在文件里面前后移动,所以它的行为与其它的I/O类有些根本性的不同。总而言之,它是一个直接继承Object的,独立的类。

基本上,RandomAccessFile的工作方式是,把DataInputStream和DataOutputStream结合起来,再加上它自己的一些方法,比如定位用的getFilePointer( ),在文件里移动用的seek( ),以及判断文件大小的length( )、skipBytes()跳过多少字节数。此外,它的构造函数还要一个表示以只读方式("r"),还是以读写方式("rw")打开文件的参数 (和C的fopen( )一模一样)。它不支持只写文件。

本人计划用RandomAccessFile类进行文件的读取,用于查找索引中记录的文件的位置。

但是遇到乱码的问题,后来解决了。

代码如下:

import java.io.*;

public class RandomFileAccessTest {

    public static void main(String[] args) throws IOException {
        long finishedFileSize = 1000 ;
        
        File newFile = new File("d:\\result.txt");
        //文件大小
        long fileSize = newFile.length();
        
        RandomAccessFile raf = new RandomAccessFile(newFile, "r");
        raf.seek(finishedFileSize);
        int offset = 500 ;
        //无乱码
//        byte[] b = new byte[1024];
//        raf.read(b, 0, offset);
//        System.out.println(new String(b));
        
        //返回1500,当前指针的位置。 1500 = 1000 + 500 = finishedFileSize + offset
//        System.out.println(raf.getFilePointer());
        
        //乱码 -- 解决了
        //在Windows下raf会默认编码成8859_1
        while(raf.read()!=-1){
            System.out.println(new String(raf.readLine().getBytes("8859_1"),"gbk"));
            System.out.println("current pointer offset:"+raf.getFilePointer());
        }
        
        raf.close();
    }

}

 

本文转载自:http://dacoolbaby.iteye.com/blog/2001391

上一篇: datav.js
吐槽的达达仔
粉丝 28
博文 104
码字总数 7105
作品 0
广州
程序员
私信 提问
Java GBK中文乱码问题分析

在io相关的操作中经常会出现乱码问题 比如在一个txt文件中按GBK编码保存内容"淘!我喜欢!" 然后用RandomAccessFile类读取并打印一行。 打印结果显示乱码: 在网上查询到加入相关编码解码操作...

skyshitt
2016/02/11
3.9K
14
Java IO总结(未完待续)

1.Java IO四个重要抽象类 (1) InputStream(字节输入流) (2) Reader(字符输入流) (3) OutputStream (4) Writer 2.文件相关 (1) 创建File对象:File() (2) 创建、删除文件:...

Taisuke
2014/06/25
1K
2
Java IO流(三)

本篇文章主要围绕字符编码展开,为了能够更好地讲述这一主题,我将从字节流操作中文数据开始。 字节流操作中文数据 假设编写有如下程序,代码贴出如下: 此时运行以上程序,可以发现在cn.tx...

yerenyuan_pku
2017/10/14
0
0
流 JAVA /IO 基本小结

流 JAVA /IO 基本小结 通过一行常见的代码讨论:new BufferedReader(new InputStreamReader(System.in)) java的IO是基于流(stream)概念的,什么是流呢,作为初学者, 我是这样理解的,在各...

MR_White
2014/08/28
51
1
文件输出流

实现读取文件有多种方式,针对不同的文件类型,有不同的读取方法。读取文件的关键技术点如下:   1.用FileInputStream打开文件输入流,通过read方法以字节为单位读取文件,是最通用的读取文...

wf王帆
2016/07/20
22
0

没有更多内容

加载失败,请刷新页面

加载更多

SIPC的保全存证变现应用才是先见之明

Facebook发起的Libra在接连退群后终于在联盟链上线前官宣成立联盟,同时Telegram公链TON在主网上线前被美国SEC要求退回私募非法所得。两个都拥有活跃用户数上亿的社交平台,一个以1000万美元...

SimpleChain
31分钟前
3
0
Node_初步了解(3)回调,作用域,上下文

本文转载于:专业的前端网站➧Node_初步了解(3)回调,作用域,上下文 1. 1 //回调:回调是异步编程最基本的方法,node.js需要按顺序执行异步逻辑的时候,一般采用后续传递的方式,将后续逻辑...

前端老手
32分钟前
3
0
好程序员Java教程分享Java的五大特点

好程序员Java教程为大家分享Java的五大特点希望对初学者有所帮助。 一、Java的(五大)特点: 1.简单性 相对于c语言来说 c语言的核心 指针(保存地址)*p Java中没有指针的概念(使用的是引用概念...

好程序员官网
33分钟前
3
0
移动端rem适配各种屏幕字体

在页面中引入这个js文件,可以实现各个屏幕的字体自适应: (function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? 'orientationchange' : ......

流年那么伤
35分钟前
4
0
2019我最喜爱的绿色应用活动投票开始,谁能突出重围?

在去年第一届软件绿色联盟开发者大会上,共有36个绿色应用荣获“2018年度我最喜爱的绿色应用”奖项。活动得到了消费者、开发者与应用厂商的一致好评,刚过完十一假期就有小伙伴们后台留言,问...

软件绿色联盟
46分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部