0

您好我正在尝试使用数据文件将数据加载到表中。我正在使用 JDBC 批量上传。将 test.data 中的数据加载到表中后,我想使用 expected-table.data 对其进行验证。因此,在以下方法中,首先当 test.data 出现时,我想进行批量上传,然后它应该使用预期的文件验证数据,但以下代码不起作用,因为 expeted-data 文件在第一次迭代中出现,而 test.data 在第二次迭代中出现。请帮助我是文件编程的新手。提前致谢。

public static void loadFromFilesNValidateTable(Schema schema, final File folder)
    {

        for (final File fileEntry : folder.listFiles())
        {
            if (fileEntry.isDirectory())
            {
                loadFromFilesNValidateTable(schema,fileEntry);
            }
            else
            {
                if(fileEntry.getName().equals("test.data"))
                {
                    BatchUpload.batchUpload(schema,fileEntry.getAbsolutePath());

                }

                if(fileEntry.getName().equals("expected-table.data"))
                {
                    validateData(schema,fileEntry.getAbsolutePath());
                }
            }
        }
    } 
4

3 回答 3

2

使用文件过滤器

public static void loadFromFilesNValidateTable(TableDef schema, final File folder) {

    // Process folders recursively        
    for(final File subFolder : folder.listFiles(new DirectoryFilter())){
        loadFromFilesNValidateTable(schema, subFolder);
    }

    // Process data files
    for (final File dataFileEntry : folder.listFiles(new FileNameFilter("test.data"))) {
        BatchUpload.batchUpload(schema,dataFileEntry.getAbsolutePath());
    }

    // Process expected files
    for (final File expectedFileEntry : folder.listFiles(new FileNameFilter("expected-table.data"))) {
        validateData(schema,expectedFileEntry.getAbsolutePath());
    }
} 

public class FileNameFilter implements FileFilter {

        private String name;

        public FileNameFilter(String name){
            this.name = name;
        }

    public boolean accept(File pathname){
        return pathname.getName().equals(name)
    }
}

public class DirectoryFilter implements FileFilter {

    public boolean accept(File pathname){
        return pathname.isDirectory();
    }
}

注意: Apache commons-io 提供了很多 FileFilters 可供使用http://commons.apache.org/proper/commons-io/javadocs/api-2.4/org/apache/commons/io/filefilter/package-summary。 html

于 2013-08-19T10:05:13.510 回答
0

我有两件事要建议你: 1. 用matches 方法改变equals 方法。Matches 方法是比较字符串的最佳方法。2. 尝试将执行 batchUpload 的时刻与执行 validateData 的时刻分开。也许你会跳转一些文件。例如,算法首先找到“expected-table.data”文件,然后找到“test.data”文件。在这种情况下,它不会验证文件。我希望我的回答是有用的,我希望我能理解你的问题:)

于 2013-08-19T10:01:58.777 回答
0

您应该将算法更改为如下所示:

for (each directory in current directory) {
    loadFromFilesNValidateTable(schema, directory);
}

if (current directory contains file "test.data") {
    batchUpload();
    if (current directory contains file "expected-table.data") {
        validateData();
    }
}
于 2013-08-19T10:06:55.813 回答