• java.io.RandomAccessFile的使用,指定位置插入字符串(覆盖插入)。jdk1.4增加内存映射文件FileChannel、MappedByteBuffer


       //目的是在java文件中插入属性和getter、setter方法 
    //找到最后一个}的结束位置,插入内容,并把}补上,}的ascii码是125
        RandomAccessFile randomAccessFile = null;
    try {
    Field[] fields_beihai = com.supermap.realestate.registration.model.genrt.GenerateBDCS_TDYT_GZ.class.getDeclaredFields();

    Field[] fields = com.supermap.realestate.registration.model.genrt.GenerateBDCS_TDYT_GZ.class.getDeclaredFields();

    // Class cls = com.supermap.realestate.registration.model.genrt.GenerateBDCS_TDYT_GZ.class;

    Class cls = Test.class;

    String modelName = cls.getSimpleName();
    String packagepath = cls.getPackage().getName().replaceAll("\.","/");
    String root = Thread.currentThread().getContextClassLoader().getResource("").getPath();
    root = root.replace("target/classes", "src/main/java");
    System.out.println(root + packagepath);
    File file = new File(root + packagepath);
    if(!file.isDirectory()) return;
    File[] files = file.listFiles();
    File modelFileResult = null;
    for (File modelFile : files) {
    String model = modelFile.getName();
    if(!model.contains(".java")) continue;
    if(!model.contains(modelName)) continue;
    modelFileResult = modelFile;
    break;
    }
    if(modelFileResult == null) return;
    System.out.println(modelFileResult.getAbsolutePath());

    randomAccessFile = new RandomAccessFile(modelFileResult,"rw");
    byte[] bytes = new byte[100];
    int len = 0;
    String aa = "";
    long start = randomAccessFile.getFilePointer();
    System.out.println("point=" + start);
    long total = randomAccessFile.length();
    System.out.println("total=" + randomAccessFile.length());

    int lastLen = 1;

    randomAccessFile.seek(total - lastLen); //从最后一个字符读取,判断是不是},是就插入新的内容
    byte lastChar = 0;
            // }的ascii码是125,找到最后一个}的位置,插入内容
                while((total - lastLen)>=0 && (lastChar = randomAccessFile.readByte()) != 125){
    System.out.println(lastLen++);
    randomAccessFile.seek(total - lastLen);
    }
    System.out.println(new String(new byte[]{lastChar}));
    start = total - lastLen;
    System.out.println("point=" + start);

    randomAccessFile.seek(start);
    randomAccessFile.write(" private String id; public void setId(String id){ this.id = id; } }".getBytes());



    } catch (Exception e) {
    e.printStackTrace();
    }finally {
    try {
    if(randomAccessFile != null ) randomAccessFile.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    内存映射文件:

    import java.io.RandomAccessFile;
    import java.nio.MappedByteBuffer;
    import java.nio.channels.FileChannel;

    public class LargeMappedFiles {
    static int length = 0x8000000; // 128 Mb

    public static void main(String[] args) throws Exception {
    // 为了以可读可写的方式打开文件,这里使用RandomAccessFile来创建文件。
    FileChannel fc = new RandomAccessFile("test.dat", "rw").getChannel();
    //注意,文件通道的可读可写要建立在文件流本身可读写的基础之上
    MappedByteBuffer out = fc.map(FileChannel.MapMode.READ_WRITE, 0, length);
    //写128M的内容
    for (int i = 0; i < length; i++) {
    out.put((byte) 'x');
    }
    System.out.println("Finished writing");
    //读取文件中间6个字节内容
    for (int i = length / 2; i < length / 2 + 6; i++) {
    System.out.print((char) out.get(i));
    }
    fc.close();
    }
    }

  • 相关阅读:
    ext数据库读取动态添加window组件
    sony e系列笔记本的OFFICE的序列号
    ext panel 移除item失效的解决办法
    ExtJS xtype class对照表
    Dynamic Form interacting with an embedded Grid
    extjs动态列--editorGridPanel(2.2)
    Ext.form.DisplayField扩展组件:在formpanel中显示html格式的内容
    ExtJS 动态增加与删除items,动态设置textField可见与否
    Extjs formPanel 显示图片 + 上传
    EXTJS的数据存储机制
  • 原文地址:https://www.cnblogs.com/shihx/p/13458212.html
Copyright © 2020-2023  润新知