"清空数据库文件"尝试使用Jackcess打开Access数据库文件时出现异常

时间:2015-05-18 15:25:34

标签: java ms-access jackcess

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)

1 个答案:

答案 0 :(得分:0)

java.io.IOException: Empty database file
    at com.healthmarketscience.jackcess.impl.JetFormat.getFormat(JetFormat.java:276)

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

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