我正在使用下面的代码在内存中创建mdb文件的副本,但是它在DatabaseBuilder构造函数上给出了空指针异常,即不存在任何文件,我想要的是创建此副本以操纵它并将该副本返回到outputstream。
文件tmp =新文件(“ test.mdb”);
FileChannel channel = MemFileChannel.newChannel(tmp,DatabaseImpl.RW_CHANNEL_MODE);
FileUtils.copyFile(file,tmp);
数据库db =新的DatabaseBuilder(tmp).setChannel(channel).open();
答案 0 :(得分:2)
因此,您有一个预制的Access数据库文件作为项目中的资源。您可以先使用Class#getResourceAsStream
打开资源,然后使用Jackcess打开该数据库的内存中副本。
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
传递给Jack 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();