在fileinputstream输入中分离文件并将数据插入到oracle表中

separate the file in fileinputstream input and insert the data into oracle tables

目前我正在读取以 'gz' 结尾的文件输入并将此输入文件数据处理到我的 oracle tables.

最初我只有路径中以 'out.gz' 结尾的文件,例如文件名看起来像 'xyz.out.gz'。我插入数据的 table 名称看起来像 BB_xyz_IMPORT.

但现在我也在同一路径中以 'px.gz' 结尾的文件,例如文件名看起来像 'xyz.px.gz' 和 table 我插入的名称数据看起来像 BB_xyz_px_IMPORT

table 名称约定总是看起来像这样,以便它可以区分要在“out.gz”文件和“px.gz”文件之间插入的结束文件名输入数据。

所以我想修改我的 java 代码,以便它应该适当地获取两个文件,区分以 'out.gz''px.gz' 结尾的文件并将此文件数据插入分别正确的 oracle tables。

下面是我的 java 代码。目前,代码无法识别以“out.gz”文件和“px.gz”结尾的文件名,并且这两个文件都将数据插入到相同的 table 中,例如“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;
    }
}

你已经写过了:

... inputFile.endsWith("gz") ? ... : ...;

boolean isIn = filePath.endsWith("px.gz");
boolean isOut = filePath.endsWith("out.gz");

所以你获取 table 名字的方法:

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