RandomAccessFile读取文本简介

RandomAccessFile类的常用的操作方法

1、public  RandomAccessFile(File file, String mode)throws FileNotFoundException  构造方法  接收File类的对象,指定操作路径,但是在设置时需要设置模式:"r": 只读、"w": 只写、"rw": 读写。

2、public RandomAccessFile(String name, String mode) throws FileNotFoundException 构造方法 不再使用File类对象表示文件,而是直接输入了一个固定的文件路径。

3、public void close() throws IOException   关闭操作

4、public int read(byte[] b) throws IOException 将内容读取到一个byte数组之中

5、public final byte readByte()  throws IOException 读取一个字节

6、public final int readInt()  throws IOException从文件中读取整型数据。

7、public void seek(long pos) throws IOException 设置读指针的位置。

8、public final void writeBytes(String s) throws IOException 将一个字符串写入到文件之中,按字节的方式处理。

9、public final void writeInt(int v) throws IOException 将一个int型数据写入文件,长度为4位。

10、public int skipBytes(int n) throws IOException 指针跳过多少个字节。

构造:public RandomAccessFile(File file, String mode)  throws FileNotFoundException

实例化此类的时候需要传递File类,告诉程序应该操作的是哪个文件,之后有一个模式,文件的打开模式,常用的两种模式:

r:读模式

w:只写

rw:读写,如果使用此模式,如果此文件不存在,则会自动创建。 

用RandomAccessFile正序读取每一行文本

public class everyline {

	public static void main(String[] args) throws IOException, IOException {
		// TODO Auto-generated method stub
		 RandomAccessFile rf = new RandomAccessFile("E:\\databike.txt", "r");

		 String line=null;
		 while((line=rf.readLine())!=null)
		 {
			 //System.out.println(line);
			 System.out.println(new String(line.getBytes("ISO-8859-1"), "gbk"));
		 }
	}

}

读取任意位置的数据

    /**
     * 读的方法
     * @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();
        }        

    }

追加数据

/**
 * 追加方式
 * 写的方法
 * @param path 文件路径
 * ***/
public static void randomWrite(String path){
    try{
        /**以读写的方式建立一个RandomAccessFile对象**/
        RandomAccessFile raf=new RandomAccessFile(path, "rw");  

        //将记录指针移动到文件最后
        raf.seek(raf.length());
        raf.write("我是追加的 \r\n".getBytes());  

    }catch(Exception e){
        e.printStackTrace();
    }  

}

任意位置插入数据

/**
     * 实现向指定位置
     * 插入数据
     * @param fileName 文件名
     * @param points 指针位置
     * @param insertContent 插入内容
     * **/
    public static void insert(String fileName,long points,String insertContent){
        try{
        File tmp=File.createTempFile("tmp", null);
        tmp.deleteOnExit();//在JVM退出时删除  

        RandomAccessFile raf=new RandomAccessFile(fileName, "rw");
        //创建一个临时文件夹来保存插入点后的数据
        FileOutputStream tmpOut=new FileOutputStream(tmp);
        FileInputStream tmpIn=new FileInputStream(tmp);
        raf.seek(points);
        /**将插入点后的内容读入临时文件夹**/  

        byte [] buff=new byte[1024];
        //用于保存临时读取的字节数
        int hasRead=0;
        //循环读取插入点后的内容
        while((hasRead=raf.read(buff))>0){
            // 将读取的数据写入临时文件中
            tmpOut.write(buff, 0, hasRead);
        }  

        //插入需要指定添加的数据
        raf.seek(points);//返回原来的插入处
        //追加需要追加的内容
        raf.write(insertContent.getBytes());
        //最后追加临时文件中的内容
        while((hasRead=tmpIn.read(buff))>0){
            raf.write(buff,0,hasRead);
        }
        }catch(Exception e){
            e.printStackTrace();
        }
    }

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

原文地址:https://www.cnblogs.com/owenma/p/8723283.html

时间: 2024-11-10 17:32:50

RandomAccessFile读取文本简介的相关文章

python 逐行读取文本

f = open("foo.txt") # 返回一个文件对象line = f.readline() # 调用文件的 readline()方法while line: print line, # 后面跟 ',' 将忽略换行符 # print(line, end = '') # 在 Python 3中使用 line = f.readline() f.close() 也可以写成以下更简洁的形式 for line in open("foo.txt"): print line,

容易使用的读取文本播放器 Text to Speech Maker 2.5

FilmConvert Stand Alone 1.216 MacOSXAutodesk.Smoke.v2015.SP1.MacOSX 1DVDAutodesk Smoke 2015提供更快的效能和更平易近人的价格专 为以Mac计算机作业的小型工作室设计,Smoke 2015专业影音特效和剪辑工具现在具备了 3D追踪.新的Timeline FX工作流程.针对搭载OS X Mavericks操作系统的新版Mac Pro新增硬件支持和系统运作的最佳化,并与Final Cut Pro X提供更佳的互通

qt读取文本

直接 代码: 1 // lyy : 2016/8/26 16:40:11 说明:读取文本 2 bool FileOpeartion:: GetTheTextContent (const QString strPath, QStringList &strContent) 3 { 4 QFile file (strPath); 5 6 if (file.open (QIODevice::ReadOnly | QIODevice::Text)) 7 { 8 QTextStream in (&fi

C#读取文本播放相应语音【转】

第一种方案: 利用微软text to speech引擎(TTS),读取文本 (1)添加Microsoft Speech Object Library的项目引用 (2)引入using SpeechLib名称控件 (3)读取文本 SpeechVoiceSpeakFlags flag = SpeechVoiceSpeakFlags.SVSFlagsAsync;         SpVoice voice = new SpVoice(); //默认使用“控制面板”—>“声音”—>“录制”选项卡的“配置

自己动手写简单的web应用服务器(3)—服务器从磁盘文件中读取文本,发送给客户端

服务器: 1 package serverAndClient; 2 3 import java.io.BufferedReader; 4 import java.io.File; 5 import java.io.FileInputStream; 6 import java.io.IOException; 7 import java.io.InputStream; 8 import java.io.InputStreamReader; 9 import java.io.OutputStream;

File类的基本操作之RandomAccessFile读取

直接贴代码了,不懂的地方留言讨论 package org.mark.randomaccessfile; import java.io.File; import java.io.FileNotFoundException; import java.io.RandomAccessFile; public class RandomAccessfileDemo2 { /** * @param args * @throws Exception */ public static void main(Stri

7 RandomAccessFile读取文件内容保存--简单例子(需要验证)

1 import org.slf4j.Logger; 2 import org.slf4j.LoggerFactory; 3 4 import java.io.*; 5 6 /** 7 * 读取动态产生的文件内容 8 */ 9 public class RandomAccessRead { 10 public static Logger logger= LoggerFactory.getLogger(RandomAccessRead.class); 11 12 //文件默认读取位置为从开始读取

python读取文本、配对、插入数据脚本

#-*- coding:UTF-8 -*- #-*- author:Zahoor Wang -*- import codecs, os, sys, platform, string def env(): return platform.system() def read_file(uri, charset = "utf-8"): f = codecs.open(uri, "r", charset) s = f.read() f.close() return s de

Python读取文本,输出指定中文(字符串)

因业务需求,需要提取文本中带有检查字样的每一行. 样本如下: 1 投入10kVB.C母分段820闭锁备自投压板 2 退出10kVB.C母分段820备投跳803压板 3 退出10kVB.C母分段820备投合820压板 4 检查2.3号主变压器分头位置一致 5 合上820断路器 6 检查820断路器确带负荷 7 检查2号.3号主变压器负荷分配正常 8 拉开802断路器 9 检查802断路器在分闸位置 10 检查3号主变压器不过负荷 我们要用的包:re(python 强大的正则包),codecs(专门