在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");
}
}
目前我正在读取以 '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");
}
}