Кажется, шифрование 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);
, чтобы посмотреть, что это делает? - person Gord Thompson   schedule 18.05.2015openEDB()
попробуйте проверитьsourceF.length()
, чтобы убедиться, что оно не равно нулю. Кроме того, я думаю, вы хотитеdestinationF = new File(destination);
вExportDB
. - person Gord Thompson   schedule 18.05.2015source
на самом деле не указывает на входной файл .mdb. Дважды проверьте, и если вы работаете на машине, отличной от Windows, помните, что пути и имена файлов * nix чувствительны к регистру (я не помню, чувствительны ли они и к Mac). - person Gord Thompson   schedule 18.05.2015sourceF.exists()
. - person Gord Thompson   schedule 19.05.2015ExportUtil.exportWriter
может работать с курсором (детали здесь), поэтому вы можете использовать это возможность контролировать порядок экспорта. Попробуйте и задайте новый вопрос, если вам нужна дополнительная помощь. - person Gord Thompson   schedule 20.05.2015