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

RandomAccessFile不明白的用法seek有代码请教谢谢了?

发布网友 发布时间:2022-05-01 11:28

我来回答

3个回答

懂视网 时间:2022-05-01 15:49

  •      * 读的方法 
  •      * @param path 文件路径 
  •      * @param pointe 指针位置 
  •      * **/  
  •     public static void randomRed(String path,int pointe){  
  •         try{  
  •             //RandomAccessFile raf=new RandomAccessFile(new File("D:\3\test.txt"), "r");  
  •             /** 
  •              * model各个参数详解 
  •              * r 代表以只读方式打开指定文件 
  •              * rw 以读写方式打开指定文件 
  •              * rws 读写方式打开,并对内容或元数据都同步写入底层存储设备 
  •              * rwd 读写方式打开,对文件内容的更新同步更新至底层存储设备 
  •              *  
  •              * **/  
  •             RandomAccessFile raf=new RandomAccessFile(path, "r");  
  •             //获取RandomAccessFile对象文件指针的位置,初始位置是0  
  •             System.out.println("RandomAccessFile文件指针的初始位置:"+raf.getFilePointer());  
  •             raf.seek(pointe);//移动文件指针位置  
  •             byte[]  buff=new byte[1024];  
  •             //用于保存实际读取的字节数  
  •             int hasRead=0;  
  •             //循环读取  
  •             while((hasRead=raf.read(buff))>0){  
  •                 //打印读取的内容,并将字节转为字符串输入  
  •                 System.out.println(new String(buff,0,hasRead));  
  •                   
  •             }  
  •               
  •               
  •               
  •         }catch(Exception e){  
  •             e.printStackTrace();  
  •         }  
  •           
  •           
  •           
  •     }  


  • 测试代码

    Java代码  技术分享
    1. public static void main(String[] args) {  
    2.     String path="D:\3\test.txt";         
    3.      int seekPointer=20;  
    4.      randomRed(path,seekPointer);//读取的方法   
    5.     //randomWrite(path);//追加写的方法  
    6.     //insert(path, 33, " lucene是一个优秀的全文检索库");  
    7. }  


    运行效果:

    Java代码  技术分享
    1. RandomAccessFile文件指针的初始位置:0  
    2. is a teacher  
    3. hadoop is perfect  


    功能two,追加数据,代码如下

    Java代码  技术分享
    1. /** 
    2.  * 追加方式 
    3.  * 写的方法 
    4.  * @param path 文件路径 
    5.  * ***/  
    6. public static void randomWrite(String path){  
    7.     try{  
    8.         /**以读写的方式建立一个RandomAccessFile对象**/  
    9.         RandomAccessFile raf=new RandomAccessFile(path, "rw");  
    10.           
    11.         //将记录指针移动到文件最后  
    12.         raf.seek(raf.length());  
    13.         raf.write("我是追加的  ".getBytes());  
    14.           
    15.     }catch(Exception e){  
    16.         e.printStackTrace();  
    17.     }  
    18.       
    19. }  


    测试代码

    Java代码  技术分享
    1. public static void main(String[] args) {  
    2.     String path="D:\3\test.txt";         
    3.      //int seekPointer=20;  
    4.     // randomRed(path,seekPointer);//读取的方法   
    5.      randomWrite(path);//追加写的方法  
    6.     //insert(path, 33, " lucene是一个优秀的全文检索库");  
    7. }  


    运行效果:

    技术分享
    功能three,任意位置插入数据,代码如下

    Java代码  技术分享
    1. /** 
    2.      * 实现向指定位置 
    3.      * 插入数据 
    4.      * @param fileName 文件名 
    5.      * @param points 指针位置 
    6.      * @param insertContent 插入内容 
    7.      * **/  
    8.     public static void insert(String fileName,long points,String insertContent){  
    9.         try{  
    10.         File tmp=File.createTempFile("tmp", null);  
    11.         tmp.deleteOnExit();//在JVM退出时删除  
    12.           
    13.         RandomAccessFile raf=new RandomAccessFile(fileName, "rw");  
    14.         //创建一个临时文件夹来保存插入点后的数据  
    15.         FileOutputStream tmpOut=new FileOutputStream(tmp);  
    16.         FileInputStream tmpIn=new FileInputStream(tmp);  
    17.         raf.seek(points);  
    18.         /**将插入点后的内容读入临时文件夹**/  
    19.           
    20.         byte [] buff=new byte[1024];  
    21.         //用于保存临时读取的字节数  
    22.         int hasRead=0;  
    23.         //循环读取插入点后的内容  
    24.         while((hasRead=raf.read(buff))>0){  
    25.             // 将读取的数据写入临时文件中  
    26.             tmpOut.write(buff, 0, hasRead);  
    27.         }  
    28.           
    29.         //插入需要指定添加的数据  
    30.         raf.seek(points);//返回原来的插入处  
    31.         //追加需要追加的内容  
    32.         raf.write(insertContent.getBytes());  
    33.         //最后追加临时文件中的内容  
    34.         while((hasRead=tmpIn.read(buff))>0){  
    35.             raf.write(buff,0,hasRead);  
    36.         }  
    37.         }catch(Exception e){  
    38.             e.printStackTrace();  
    39.         }  
    40.     }  


    测试代码

    Java代码  技术分享
    1. public static void main(String[] args) {  
    2.         String path="D:\3\test.txt";         
    3.          //int seekPointer=20;  
    4.         // randomRed(path,seekPointer);//读取的方法   
    5.         // randomWrite(path);//追加写的方法  
    6.          insert(path, 33, " lucene是一个优秀的全文检索库");  
    7.     }  


    运行效果:

    技术分享

    至此,RandomAccessFile类的几个功能,散仙在代码中已给出实现了,现在回到本文开始前的提的那个需求,用RandomAccessFile类就可以轻而易举的完成了,另外需要注意的是,向指定位置插入数据,是散仙自己改造的功能,RandomAccessFile并不直接支持,需要新建一个缓冲区临时空间,存数据,然后在写,因为一旦数据量上了级别,在任意位置插入数据,是很耗内存的,这个也就是为什么hadoop的HDFS文件系统,只支持append的方式,而没有提供修改的操作。


    另外我们可以用RandomAccessFile这个类,来实现一个多线程断点下载的功能,用过下载工具的朋友们都知道,下载前都会建立两个临时文件,一个是与被下载文件大小相同的空文件,另一个是记录文件指针的位置文件,每次暂停的时候,都会保存上一次的指针,然后断点下载的时候,会继续从上一次的地方下载,从而实现断点下载或上传的功能,有兴趣的朋友们可以自己实现下。

    RandomAccessFile的用法【转】

    标签:

    热心网友 时间:2022-05-01 12:57

    seek
    public void seek(long pos)
    throws IOException
    设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。偏移量的设置可能会超出文件末尾。偏移量的设置超出文件末尾不会改变文件的长度。只有在偏移量的设置超出文件末尾的情况下对文件进行写入才会更改其长度。

    参数:
    pos - 从文件开头以字节为单位测量的偏移量位置,在该位置设置文件指针。
    抛出:
    IOException - 如果 pos 小于 0 会发生 I/O 错误。

    在你的例子中就是将RandomAccessFile的读取指针设置在0的位置,从0位开始读取数据^^^

    注意查看你读取的空格数量!
    看错了你是写进去,它只能定位文件中存在的,写进去2,3都还没有数据,指针不可能会指到那儿,所以结果是一样的……

    热心网友 时间:2022-05-01 14:15

    seek用来定位在文件中插入的位置。
    RandomAccessFile不明白的用法seek有代码请教谢谢了?

    IOException - 如果 pos 小于 0 会发生 I/O 错误。在你的例子中就是将RandomAccessFile的读取指针设置在0的位置,从0位开始读取数据^^^ 注意查看你读取的空格数量!看错了你是写进去,它只能定位文件中存在的,写进去2,3都还没有数据,指针不可能会指到那儿,所以结果是一样的……...

    vlookup 的用法

    VLOOKUP是Excel中用于垂直查找的函数,其基本用法包括四个参数:1. 查找值:即在数据表首列中需要搜索的值。2. 数据表:包含查找值的单元格区域或数组。3. 返回值所在列数:指定返回查询区域中第几列的值。4. 查找方式:选择精确匹配(FALSE)或近似匹配(TRUE),前者要求完全匹配,后者则返回最接近且不大于查找值的项。VLOOKUP能够精确查找与大致匹配数据,并跨列提取相关信息,是数据处理中非常实用的工具。Excel一键自动匹配,在线免费vlookup工具,3步完成!Excel在线免费vlookup工具,点击4步自动完成vlookup匹配,无需手写公式,免费使用!

    RandomAccessFile类中skipByte()和seek()不太懂?

    raf.seek(0); //将文件指针移动到文件开始位置 str="";for(int i=0;i<len;i++)str=str+(char)raf.readByte();System.out.println("name:"+str);System.out.println("age:"+raf.readInt());你在进行这一段操作之后,文件指针已经指到第一个员工末尾了,所以你只要跳过12个字节就可到...

    java RandomAccessFile 向文件中写入数据,覆盖原来的数据

    用追加。还用你的代码,先得到文件的长度,rf.seek(f1.length()); 再写就行了。

    RandomAccessFile类的seek 和skipBytes 区别

    seek(long a)是定位文件指针在文件中的位置。参数a确定读写位置距离文件开头的字节个数,比如seek(0)就是定位文件指针在开始位置。是绝对定位。skipBytes()是指在文件中跳过给定数量的字节。是相对定位。对于seek方法,拥有skipBytes( )的功能,但seek( )在使用过程非常影响系统的开销。只有万不得已的情...

    RandomAccessFile的readChar(),双数读出正确,单数不正常,数字编号不正 ...

    首先要明白的是,java中一个字符(char)是2个字节 raf.seek(Integer.parseInt(s));这个方法的参数是指定偏移的字节数 seek方法参数 readChar方法读取位置 readChar读取内容 0 文件开始 第一个字符 1 第一个字节之后开始 第一个字符的第二个字节 第二个字符第一个字节 2 第二...

    Android使用RandomAccessFile读取TXT文件seek()之后读取会部分乱码_百 ...

    public interface RandomAccessList 实现所使用的标记接口,用来表明其支持快速(通常是固定时间)随机访问。此接口的主要目的是允许一般的算法更改其行为,从而在将其应用到随机或连续访问列表时能提供良好的性能。 将操作随机访问列表的最佳算法(如 ArrayList)应用到连续访问列表(如 LinkedList)时,可产生...

    用randomaccessfile流将一个文本文件倒置读出

    public static void main(String args[]) { try { File file = new File("C:\\Users\\senn\\Desktop\\作业\\test.txt"); RandomAccessFile random = new RandomAccessFile(file, "rw"); long theLength = random.length(); while (theLength > 0) { random.seek(...

    《Java面向对象编程》导读-RandomAccessFile类随机读写文件

    例程1:RandomTester类展示了RandomAccessFile类的使用。RandomTester.java代码如下,在main()方法中,使用“rw”访问模式打开D:\test.dat文件。若文件不存在,构造方法会创建。程序接着向文件写入10个long数据,每个占用8字节。通过rf.seek(5*8)移动读写指针,跳过第5个long数据,rf.writeLong(1234)...

    java中seek()的用法

    写段代码你看一下吧,用于从文件指定的位置开始读取,一般的下载工具都有断点续传功能,比如读取某个文件读取了一半,取消下载了,下次再下载的时候,从断点的位置继续下载,而不是重新下载文件,使用这个方法可以做到 public class Test2 { public static void main(String[] args) throws Exception {...

    关于RandomAccessFile类

    首先你的输出文件:student.txt命名有问题,在windows平台下,这个文件的长度,不是你写入数据的具体长度,平台可能会加上几个字符(你可以把第一个student对象的名字改成"a"实验一下),你的测试没有抛异常,可能是你的测试代码正好能组成一个.txt格式的文件,所以平台没有给你加字节。我觉得最好还是...

    seek的用法和搭配 seek out用法 seek for 用法 equal的用法 advise用法 seek用法 seek函数用法 present用法 seek track
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    ...可是不知道为什么我想去西安的寺庙皈依。 这样对后面的修行会造成影... protobuf使用详解 开机显示睡眠模式什么情况? e31230v2这款处理器怎么样? 怎么样在淘宝收藏夹里看收藏商城东西? 枸杞和这“三物”是好搭档,坚持吃30天,3大好处可能不请自来! 在微信里京东商城里收藏的商品能不能在qq里的京东商城的收藏里找到 oppoai给图片加文字能把框里的文字竖向写吗oppo怎么在图片上加字 新宿御苑的交通信息 南京南站坐公交怎么到御苑宾馆 廖排骨的卤料包怎么用?好吃吗? 廖排骨和紫烟百味鸡哪个好吃啊? 廖排骨 双桥店怎么样 廖排骨和吮指排骨哪个好吃?哪个品牌更好?请高手指点! 廖排骨什么口味比较好吃 廖排骨味道如何 廖排骨好吃吗 真的很有名吗 廖排骨可以只学技术吗? 大家觉得廖排骨怎么样? 手机和电脑用蓝牙连接所传的照片在哪可以找到?跪求了 有本小说主角有一对姐妹花一个叫另外一个叫什么忘记了.一开始主角打不过那对姐妹 后来和那对姐妹训练 win10系统,通过与手机蓝牙连接,将手机的图片传到电脑,然后在电脑怎么找到传上来的图片? 请问怎么申请微信小号?谢谢! 都市小说 提到药王孙思邈 几年前看的一部都市小说,误入桃花源,在那收了一对姐妹花,求这部小说的名字 求一部现代玄幻小说,男主家世很强大!女人很多,其中有一对姐妹花,姐妹花是杀手。很久之前的小说了 姐妹花的悲惨遭遇电子书txt全集下载 廖排骨的浓缩卤汁调出来卤肉好吃吗 一个手机号只可以申请一个吗?如何开通一个微信小号? - 信息提示 用过“廖排骨”卤料的朋友都来说说,“廖排骨”卤的东西好吃吗? 一个手机号怎样申请小号? 七年级数学第一章有理数有那些基本概念? 初一上册数学基本概念 北师大版 请问:有小学数学二年级上下册RJ口算大通关吗? 二年级买口算大通关好还是计算小达人好 怎么申请 注册 《53天天练数学二年级下册》pdf下载在线阅读全文,求百度网盘云资源 口算大通关二年级下册答案(第三课时有余数除法竖式计算(1))? 怎么注册 53天天练二年级2021和2022有什么 怎么申请怎么注册 《53天天练小学语文二年级下册人教版》pdf下载在线阅读全文,求百度网盘云资源 注册一个新的怎么注册 口算大通关五年级上册20页 哪里批二年级数学下册口算大通关 怎么注册? 口算大通关五年级上册答案 口算大通关六年级上册答案 怎么洗掉橡胶上的油墨 《暗黑破坏神2》重制版进不去游戏是什么?