问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎么从一个文件的指定位置读取指定长度的字节

发布网友 发布时间:2022-04-09 23:53

我来回答

2个回答

懂视网 时间:2022-04-10 04:14

http://www.cnblogs.com/Sunw/p/3801145.html

http://www.cnblogs.com/dukc/p/4776868.html

http://www.cnblogs.com/zhujiabin/p/5660541.html

 

总结:

  1、构造方法:RandomAccessFile有两个构造方法

    (1) RandomAccessFile(File file, String mode)

    (2) RandomAccessFile(String filepath, String mode)

    mode参数表示打开文件方式,其值及含义如下:

含意

"r" 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException
"rw" 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。
"rws" 打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。
"rwd" 打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。

  2、文件长度属性:同java.io.File对象一样的length

  3、指针定位方法:

    public void seek(long pos) throws IOException {}
    参数pos - 从文件开头以字节为单位测量的偏移量位置,在该位置设置文件指针。

    (1) pos位于 [0, length] 之间,超出范围则报错;

    (2) 一般在读取文件时,不要将pos指向length,因为pos指向length表示文件已读完,这时再调用read方法则会抛出异常,如果是反向读取文件,可以设置pos=length-1,这表示下一次read得到的事最后一个字符;

    (3) 定义了多种read方法,用于读取不同类型的数据,具体请查看API

  4、读取文件时要注意指针位置:

    (1) 指针自动移动:每次调用read的时候,指针pos会自动移动到read的数据之后,这就表示,如果需要重复read某一段数据,那么每次read前都要手动调用一次seek(pos)方法;

    (2) 反向读取需注意:在反向读取文件时,我这里使用了 if(logFile.readByte() == ‘ ‘) {} 来判断是否读取到了换行符,由于(1)的关系,在执行这个if之后,指针向后移动了一个字节长度,所以在if块中,我们可以直接调用readLine来获取下一行的数据,也正因为如此,我们在这个if块中,只能获取到前面存在换行符‘ ‘的数据,这就表明了,这里面永远不可能获取到第一行的数据(因为第一行前面没有行了,也就没有换行符‘ ‘了),所以这里对首行数据进行单独读取。

    (3) 空行处理:line = logFile.readLine(); 如果读取了空行,则这里 line = null; (个人认为这是不对,原因很简单:既然是空行,就表示存在这个行,只是没有数据而已,所以个人认为应该是 "" 而不是 null);所以在这里不要直接使用line,小心报NullPointException哦;

    (4) 字符集问题:readLine()存在中文乱码问题;我没有深入研究过是否能直接read中文,这里只是对read结果做了简单处理,如果你有更好的中文乱码解决方案,也请你能留言告诉我。

 

读取文件任意位置的内容——RandomAccessFile

标签:mode   异常   类型   存储设备   dom   打开文件   不同   简单   而不是   

热心网友 时间:2022-04-10 01:22

可以使用RandomAccessFile类。例如要从100字节开始输出工作目录下的data.txt文件的类容。
package konw.test1;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
public class Test1
{
public static void main(String[] args)
{
long pos = 100;
try
{
String str = "";
RandomAccessFile randomAccessFile = new RandomAccessFile("data.txt", "rw");
randomAccessFile.seek(pos);//将文件流的位置移动到pos字节处
while( (str = randomAccessFile.readLine()) != null)
{
System.out.println(str);
}
randomAccessFile.close();

} catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何在win10下安装docker? windows(win10)上的docker使用:安装(国内镜像)、操作 win10安装dockerWin10下Docker安装和使用 关于安装配置docker,找不到Hyper-V(win10 家庭版需要配置,专业版不需要... 怎么把微信上的聊天记录转到新手机 怎么把聊天记录转到另一个手机 快递被别人冒领,快递公司有没有责任 洋葱汤洋葱汤 一颗洋葱汤怎么做 一颗洋葱汤怎么做好吃 其他人qq群直播的时候 只有我一个人看不见画面怎么回事? QQ直播为什么突然变的没图象了? 乌,的读音是什么 求比较新的耽美丧尸文or重生文 乌字的笔画顺序 《韩非子》琴瑟如寐txt全集下载 乌龟的乌字怎么写 求好看的耽美小说!要腹黑攻,不要娘受,结局要好的!!! 乌的笔顺怎么写 类似于重生之扑倒竹马的耽美小说 “乌”字的笔画有几画? 求类似于《暖阳》之类的重生耽美文!!竹马竹马的!谢谢!耽美偶 智能互联汽车有什么功能?和现在的传统汽车有哪些区别呢? 汽车智能化,网联化配置都包含哪些 乌字笔画顺序怎么写 求BL小说 不要重生 不要穿越 求现代耽美小说,最好是总裁或他的弟弟之类的。 乌字的写法 乌的笔画顺序怎么写的 求强攻弱受攻宠受的文 网上可以申请银行卡办理吗? 来空间踩一踩是什么意思?切,再切一下是什么意思? 朋友圈广告怎么去投放 QQ视频中播放电影怎么没有图像,只有声音( 别人说我去他QQ空间踩一下,踩一下是什么意思。 有谁能告诉我证通电子股票明天能涨吗 跟证通电子类似的股票,还没有涨的 证通电子复牌之后封涨停为什么还有卖盘 关于2015级新生专业教育大会的通讯稿怎么写 谁有86版的聊斋下载 给一个啊 谁知道86版的聊斋 最老版本的下载地址 蓝色家具配什么颜色墙面 狂求86版聊斋下载地址 汽车大灯翻新如何处理? 蓝色家具配什么颜色的墙 蓝色衣柜搭配什么颜色墙面 跪求86版聊斋全集高清下载地址 ln558188@163.com 新装修的房子大白墙,配什么颜色的家具好看?该如何设计? 怎么看待“启蒙”? 蓝色的天花板与什么颜色的墙壁搭配?