"Empty database file" 尝试使用 Jackcess 打开 Access 数据库文件时出现异常

"Empty database file" exception when trying to open an Access database file with Jackcess

Jackcess encrypt 似乎无法打开提供的文件。

这是代码。 我想要做的是打开受密码保护的数据库并将指定的 table 导出为 .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)
java.io.IOException: Empty database file
    at com.healthmarketscience.jackcess.impl.JetFormat.getFormat(JetFormat.java:276)

告诉您 Jackcess 认为您试图打开的文件不包含任何字节。即使没有(用户)表、查询等的 Access 数据库,文件大小仍将非零,因为系统对象必须存在才能成为有效的数据库文件。

因此,要么您尝试打开的文件实际存在但长度为零,要么您提供的路径无效。