[英]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.