我发现了一个名为Jackcess的出色库,它允许您使用Microsoft Access进行转换,解析创建等。
目的是进行转换,此代码可以成功完成此转换。
导出时具有过滤器功能,可以在下面的文档链接中看到。目的是使用前3列,排除其余数据。
ExportUtil Documentation
应用过滤器对象不起作用,有人知道是否还有其他需要首先处理的东西……*在这里挠头*
Export Filter Documentation
public void db_dump(String mdbFile, String outputDir) {
File file = new File("/Users/testUser/Downloads/example.mdb");
if(file != null) {
File outDir = new File("/Users/testUser/Desktop/output123");
boolean success = outDir.mkdir();
if (success) {
Database db = null;
try {
db = DatabaseBuilder.open(file);
Table t = db.getTable("MappedCHTCP");
List<Column> cols = new List<Column>()
@Override methods for list ommited .... size(), contains(), etc
System.out.println(t.getColumns());
// cols.add(0,t.getColumn("word"));
for (Column c : t.getColumns()) {
if((c != null) && (c.getColumnIndex() < 3)) {
System.out.println(c.getName());
cols.add(c);
}
}
SimpleExportFilter ef = new SimpleExportFilter(); //THIS IS THE PROBLEM
ef.filterColumns(cols);
File csvFile = new File(outDir+File.separator+"MappedCHTCP.csv");
ExportUtil.exportFile(db, "MappedCHTCP", csvFile, false, null, '"',ef); //NOT ABLE TO APPLY FILTER
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
最佳答案
根据我在单元测试代码here中发现的内容,以下示例代码似乎有效。它仅导出名为[Members]的表的前三(3)列:
package jackcessTest;
import java.io.File;
import java.util.*;
import com.healthmarketscience.jackcess.*;
import com.healthmarketscience.jackcess.util.ExportFilter;
import com.healthmarketscience.jackcess.util.ExportUtil;
import com.healthmarketscience.jackcess.util.SimpleExportFilter;
public class JackcessTest {
public static void main(String[] args) {
try (Database db = DatabaseBuilder.open(
new File("C:/Users/Public/mdbTest.mdb"))) {
ExportFilter eFilter = new SimpleExportFilter() {
private List<Column> _cols = new ArrayList<Column>();
private int _colIdx = 0;
@Override
public List<Column> filterColumns(List<Column> columns) {
for (Column c : columns) {
if (_colIdx++ < 3) _cols.add(c);
}
return _cols;
}
};
ExportUtil.exportFile(
db,
"Members",
new File("C:/Users/Public/zzzJdump.csv"),
true,
",",
'"',
eFilter);
} catch (Exception e) {
e.printStackTrace(System.out);
}
}
}