[英]How to get files from a directory on specific condition one file must come after another
嗨,我正在尝试使用数据文件将数据加载到表中。 我正在使用JDBC批量上传。 将test.data中的数据加载到表中后,我想使用expected-table.data验证它。 所以在下面的方法中,首先当test.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());
}
}
}
}
使用FileFilter
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提供了很多可以使用的FileFilter http://commons.apache.org/proper/commons-io/javadocs/api-2.4/org/apache/commons/io/filefilter/package-summary。 HTML
我有两件事要建议你:1。用匹配方法改变equals方法。 匹配方法是比较字符串的最佳方法。 2.尝试将您执行batchUpload的时刻与执行validateData的时刻分开。 也许你跳了一些文件。 例如,算法首先找到“expected-table.data”文件,然后找到“test.data”文件。 在这种情况下,它不验证文件。 我希望我的答案很有用,我希望我能理解你的问题:)
您应该将算法更改为以下内容:
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();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.