我目前有一个简单的程序,可以将数据插入到mysql数据库表中,如下所示:
System.out.println("New path created: " + newPath);
String newPathfinal = newPath.toString();
try (Connection connection = DBConnection.getConnection())
{
String file = "C:/Users/User/Desktop/Test/" + newPathfinal;
String loadQuery = "LOAD DATA LOCAL INFILE '" + file + "' INTO TABLE txn_tbl FIELDS TERMINATED BY ','"
+ " LINES TERMINATED BY '\n' " + "IGNORE 1 LINES(txn_amount, card_number, terminal_id)";
System.out.println(loadQuery);
Statement stmt = connection.createStatement();
stmt.execute(loadQuery);
System.out.println("Data import success");
}
catch (Exception e)
{
e.printStackTrace();
}
但是,传入的文件名称和内容(列不同)会有所不同,所以我希望按名称将文件过滤到不同的LOAD DATA LOCAL INFILE命令中,以便正确插入数据。
我正在考虑使用一个简单的if-else语句,因为我将文件名命名为String但我意识到if-else语句将FULL文件名作为条件,这在我想要的情况下不起作用按部分文件名过滤。像这样:if(newPathfinal == “apple" {}
我希望将包含单词“apple”的所有文件导入到某个表中。
例如,假设我想将名称从java_1开始的文件导入到mySQL表java1中。而像apple_1这样名为“apple”的文件进入apple1。 java_2和apple_2继续导入,我需要相应地将这些过滤到正确的LOAD DATA LOCAL INFILE语句中,以将它们的数据插入到正确的表中。
有什么方法可以按部分文件名过滤?我读了jfilechooser和fileFilter,但是这些似乎集中在文件扩展名上,因为文件都是相同的.csv格式,所以文件扩展名不是我关注的区域。
再次非常感谢!
答案 0 :(得分:2)
听起来你想使用startsWith
方法。
if (newPathFinal.startsWith("java"))
{
// do java stuff
}
else if (newPathFinal.startsWith("apple"))
{
// do apple stuff
}
答案 1 :(得分:2)
if
语句只有“将完整的文件名作为条件”,如果你按照这种方式编程的话。使用File和String类提供的方法,您可以做更多事情。
首先,File.getName()将为您提供文件路径的名称部分,与目录分开:
File file = new File("C:/Users/User/Desktop/Test/java_12345.txt");
System.out.println(file.getName()); // prints "java12345.txt"
现在,您可以使用String
中的方法开始处理文件名。对于您的示例,startsWith()将是理想的:
if (file.getName().startsWith("apple")) {
// handle "apple" files
}
else if (file.getName().startsWith("java")) {
// handle "java" files
}
如果你想过滤掉特定的扩展程序,还有endsWith:
if (file.getName().startsWith("apple") && file.getName().endsWith(".txt") {
// handle "apple*.txt" files
}
else if (file.getName().startsWith("java")) {
// handle "java" files
}
这就是容易的事情。有各种各样的方法可以检查和测试String
,这些方法现在或将来都可以派上用场。您可以使用substring()查看名称内部,甚至使用matches()进行真正棘手的过滤。