Jackcess ExportFilter 的问题

Posted

技术标签:

【中文标题】Jackcess ExportFilter 的问题【英文标题】:Issue with Jackcess ExportFilter 【发布时间】:2014-04-15 08:58:28 【问题描述】:

我发现了一个很棒的库,叫做 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();
            

        
    

【问题讨论】:

感谢您的关注……真的很奇怪!在 exportFile 函数中构造对象并不重要。 【参考方案1】:

根据我在单元测试代码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);
        
    

【讨论】:

太棒了,非常感谢!不是很清楚:)。希望这对将来的某人有所帮助。

以上是关于Jackcess ExportFilter 的问题的主要内容,如果未能解决你的问题,请参考以下文章

Jackcess 解码不支持警告

为啥UCanAccess 需要密码而Jackcess 不需要?

在 Jackcess 中对表进行排序

使用 Jackcess 在 Java 中更新行

Java Jackcess 库文档?

如何将 Jackcess 及其依赖项导入 Eclipse?