В настоящее время я читаю входной файл, откуда файл заканчивается на 'gz'
, и обрабатываю данные этого входного файла в свои таблицы оракула.
Изначально у меня были только файлы в пути, который заканчивается на 'out.gz'
, например, имя файла выглядит как 'xyz.out.gz'
. И имя таблицы, в которую я вставляю данные, выглядит как BB_xyz_IMPORT
.
Но теперь у меня также есть файлы по тому же пути, который заканчивается на 'px.gz'
, например, имя файла выглядит как 'xyz.px.gz'
, а имя таблицы, в которую я вставляю данные, выглядит как BB_xyz_px_IMPORT
.
Соглашения об именах таблиц всегда выглядят так, чтобы можно было различать входные данные конечного имени файла для вставки между файлом «out.gz
» и файлом «px.gz
».
Итак, я хочу изменить свой код Java таким образом, чтобы он правильно воспринимал оба файла, отличал файл, заканчивающийся на 'out.gz'
и 'px.gz'
, и вставлял данные этого файла в правильные таблицы оракула соответственно.
Ниже приведен мой код Java. В настоящее время код не распознает имя файла, заканчивающееся между файлом «out.gz
» и «px.gz
», и оба файла вставляют данные в одну и ту же таблицу, например, «BB_xyz_IMPORT
».
public class BIImportWorkflow extends AbstractBloombergWorkflow {
private final static Logger log = LoggerFactory.getLogger(BIImportWorkflow.class);
@Override
public boolean run(CommandLine commandLine) throws Exception {
AnnotationConfigApplicationContext applicationContext = initializeApplicationContext();
String inputFile = commandLine.getOptionValue("in");
if (inputFile == null) {
log.error("The input file has not been specified");
return false;
}
log.info("Importiere Daten aus der Datei " + inputFile);
try (InputStream is = new FileInputStream(inputFile);
Reader underlyingReader = inputFile.endsWith("gz")
? new InputStreamReader(new GZIPInputStream(is), DEFAULT_CHARSET)
: new InputStreamReader(is, DEFAULT_CHARSET);
BufferedReader reader = new BufferedReader(underlyingReader)) {
BlImporter BlImporter = applicationContext.getBean(BlImporter.class);
BlImporter.processFile(reader, tablenameFromFilename(inputFile));
}
log.info("Import abgeschlossen");
return true;
}
private String tablenameFromFilename(String path) {
String filename = Paths.get(path).getFileName().toString();
return "BB_" + filename.substring(0, filename.indexOf('.')).toUpperCase() + "_IMPORT";
}
@Override
public void addOptions(Options options) {
options.addOption(null, "in", true, "(bbgimport) specifies the input file");
}
@Override
public String getName() {
return "bbgimport";
}
@Override
public boolean updateDatabase() {
AnnotationConfigApplicationContext applicationContext = initializeApplicationContext();
BlDBMigrator BlDBMigrator = applicationContext.getBean(BlDBMigrator.class);
BlDBMigrator.updateDB();
return true;
}
}
я отредактировал свой вопрос с дополнительным объяснением и кодом. я имею в виду, что я не уверен, какие условия мы можем использовать для разделения имени файла, заканчивающегося на «out.gz» и «px.gz», чтобы он мог правильно вставлять данные в соответствующие таблицы.
Вы уже написали это:
... inputFile.endsWith("gz") ? ... : ...;
boolean isIn = filePath.endsWith("px.gz");
boolean isOut = filePath.endsWith("out.gz");
Итак, ваш метод получения имени таблицы:
private String tablenameFromFilename(String path) {
String filename = Paths.get(path).getFileName().toString();
if (filename.endsWith("out.gz") {
return "BB_"+ filename.substring(0,filename.indexOf('.')).toUpperCase() + "_IMPORT";
} else if (filename.endsWith("px.gz")) {
return "BB_" + filename.substring(0, filename.indexOf('.')).toUpperCase() + "_PX_IMPORT";
} else {
throw new RuntimeException("Extension unsupported");
}
}
я отредактировал свой вопрос с дополнительным объяснением и кодом.
Обновлено для вашей проблемы
Что вы подразумеваете под «условиями if/case»?