【发布时间】:2015-05-18 15:25:33
【问题描述】:
Jackcess 加密似乎无法打开提供的文件。
这是代码。 我要做的是打开受密码保护的数据库并将指定的表导出为 .csv 文件。
public class DBTool {
private final String source = "/Users/myMac/Desktop/database.mdb";
private final String destination = "/Users/myMac/Desktop/table.csv";
private File sourceF;
private File destinationF;
private Database db;
public DBTool() {
}
public void openEDB(){
sourceF = new File(source);
try {
db = new DatabaseBuilder(sourceF)
.setCodecProvider(new CryptCodecProvider("password"))
.open();
} catch (IOException ex) {
Logger.getLogger(DBTool.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void exportDB(){
sourceF = new File(destination);
try {
ExportUtil.exportFile(db, "TableName", destinationF);
} catch (IOException ex) {
Logger.getLogger(DBTool.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
以下是错误 我似乎无法弄清楚如何简单地打开要导出的文件。
java.io.IOException: Empty database file
at com.healthmarketscience.jackcess.impl.JetFormat.getFormat(JetFormat.java:276)
at com.healthmarketscience.jackcess.impl.DatabaseImpl.open(DatabaseImpl.java:378)
at com.healthmarketscience.jackcess.DatabaseBuilder.open(DatabaseBuilder.java:248)
at accesstoolssim.DBTool.openEDB(DBTool.java:30)
at accesstoolssim.AccessToolsSim.main(AccessToolsSim.java:9)
Exception in thread "main" java.lang.NullPointerException
at java.io.FileOutputStream.<init>(FileOutputStream.java:203)
at java.io.FileOutputStream.<init>(FileOutputStream.java:162)
at java.io.FileWriter.<init>(FileWriter.java:90)
at com.healthmarketscience.jackcess.util.ExportUtil.exportFile(ExportUtil.java:204)
at com.healthmarketscience.jackcess.util.ExportUtil.exportFile(ExportUtil.java:172)
at accesstoolssim.DBTool.exportDB(DBTool.java:39)
at accesstoolssim.AccessToolsSim.main(AccessToolsSim.java:10)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)
【问题讨论】:
-
您是否尝试过以“正常”方式打开数据库,即
db = DatabaseBuilder.open(sourceF);以查看其作用? -
相同的输出,因为文件是空的,所以它点击 .open 并吐出空数据库文件。我不认为这可能是源本身的问题,我使用数据库并且它在 Access 中运行良好。
-
在
openEDB()中尝试检查sourceF.length()以确保它不为零。另外,我认为您希望destinationF = new File(destination);在ExportDB中。 -
SourceF.length();返回 0。我绝对想要 destinationF 而不是 source。因此,如果使用变量以及完整路径的文件长度为零,这可能是路径问题吗?还是我用来打开文件的方法存在更深层次的问题?打开文件让我感到难过,在那之后,其他一切似乎都很困难。感谢到目前为止的提示。
-
是的,几乎可以肯定,
source字符串实际上并不指向输入的 .mdb 文件。仔细检查,如果您碰巧在非 Windows 机器上工作,请记住 *nix 路径和文件名区分大小写(我不记得 Mac 是否也如此)。