Отделить файл в файле inputstream input и вставить данные в таблицы оракула

В настоящее время я читаю входной файл, откуда файл заканчивается на '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;
    }
}

Что вы подразумеваете под «условиями if/case»?

Stultuske 30.07.2019 11:27

я отредактировал свой вопрос с дополнительным объяснением и кодом. я имею в виду, что я не уверен, какие условия мы можем использовать для разделения имени файла, заканчивающегося на «out.gz» и «px.gz», чтобы он мог правильно вставлять данные в соответствующие таблицы.

Andrew 30.07.2019 13:05
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
99
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы уже написали это:

... 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");
  }
}

я отредактировал свой вопрос с дополнительным объяснением и кодом.

Andrew 30.07.2019 13:05

Обновлено для вашей проблемы

IQbrod 30.07.2019 14:32

Другие вопросы по теме