代码之家  ›  专栏  ›  技术社区  ›  Haider

在内存中创建mdb副本时出错

  •  1
  • Haider  · 技术社区  · 6 年前

    我用下面的代码在内存中创建一个mdb文件的副本,但是它在DatabaseBuilder构造函数上给出了一个空指针异常,即不存在任何文件,我想要的是创建一个这个文件的副本,并操作它并将副本返回outputstream。

    File tmp=新文件(“测试.mdb");

    文件通道= MemFileChannel.newChannel文件(tmp,DatabaseImpl.RW\频道\模式);

    FileUtils.copyFile文件(文件,tmp);

    Database db=new DatabaseBuilder(tmp).setChannel(channel).open();

    1 回复  |  直到 6 年前
        1
  •  2
  •   Gord Thompson    6 年前

    Class#getResourceAsStream 要打开资源。。。

    final String dbResourcePath = "/embedded.accdb";
    @SuppressWarnings("rawtypes")
    Class thisClass = JackcessTestMain.class;  // my "main" class
    InputStream dbResourceStream = null;
    // for running from executable jar 
    dbResourceStream = thisClass.getResourceAsStream("/resources" + dbResourcePath);
    if (dbResourceStream == null) {
        // for running inside the Eclipse IDE
        dbResourceStream = thisClass.getResourceAsStream(dbResourcePath);
    }
    

    ... 传过来 InputStream 一个傻瓜 MemFileChannel ...

    MemFileChannel mfc = MemFileChannel.newChannel(dbResourceStream);
    

    DatabaseBuilder 打开 Database

    Database db = new DatabaseBuilder().setChannel(mfc).open()
    

    完成对数据库内存副本的更改后,可以将通道的内容发送到OutputStream。例如,

    db.close();
    FileOutputStream fos = new FileOutputStream("C:/Users/Public/zzz.accdb");
    mfc.transferTo(fos);
    fos.close();