Java:如何按文件名而不是扩展名过滤传入文件?
Java: how to filter incoming files by filename, not extensions?
我目前有一个简单的程序可以将数据插入 mysql 数据库 table,如下所示:
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 语句,因为我将文件名规定为字符串,但我意识到 if-else 语句将完整文件名作为条件,这在我的情况下不起作用想按部分文件名过滤。像这样: if(newPathfinal == “apple" {}
我要将所有包含单词 "apple" 的文件导入到某个 table 中。
例如,假设我想将名称以 "java" 开头的文件导入 java_1 到 mySQL table java1。并将名为 "apple" 的文件(例如 apple_1)放入 apple1。 java_2 和 apple_2 继续导入,我需要将它们相应地过滤到正确的 LOAD DATA LOCAL INFILE 语句中,以将它们的数据插入到正确的 tables.
有什么方法可以按部分文件名过滤吗?我阅读了 jfilechooser 和 fileFilter,但它们似乎专注于文件扩展名,这不是我关注的领域,因为文件都是相同的 .csv 格式。
再次感谢!
听起来你想使用 startsWith
方法。
if (newPathFinal.startsWith("java"))
{
// do java stuff
}
else if (newPathFinal.startsWith("apple"))
{
// do apple stuff
}
if
语句仅 "take the FULL filename as a condition" 如果您以这种方式编程。使用 File and String 类 中提供的方法,您可以做得更多。
首先,File.getName() 会得到文件路径的 name 部分,与目录分开:
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
s,这些方法现在或将来可能会派上用场。您可以使用 substring() to peek inside the name, or even matches() 进行非常棘手的过滤。
我目前有一个简单的程序可以将数据插入 mysql 数据库 table,如下所示:
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 语句,因为我将文件名规定为字符串,但我意识到 if-else 语句将完整文件名作为条件,这在我的情况下不起作用想按部分文件名过滤。像这样: if(newPathfinal == “apple" {}
我要将所有包含单词 "apple" 的文件导入到某个 table 中。
例如,假设我想将名称以 "java" 开头的文件导入 java_1 到 mySQL table java1。并将名为 "apple" 的文件(例如 apple_1)放入 apple1。 java_2 和 apple_2 继续导入,我需要将它们相应地过滤到正确的 LOAD DATA LOCAL INFILE 语句中,以将它们的数据插入到正确的 tables.
有什么方法可以按部分文件名过滤吗?我阅读了 jfilechooser 和 fileFilter,但它们似乎专注于文件扩展名,这不是我关注的领域,因为文件都是相同的 .csv 格式。
再次感谢!
听起来你想使用 startsWith
方法。
if (newPathFinal.startsWith("java"))
{
// do java stuff
}
else if (newPathFinal.startsWith("apple"))
{
// do apple stuff
}
if
语句仅 "take the FULL filename as a condition" 如果您以这种方式编程。使用 File and String 类 中提供的方法,您可以做得更多。
首先,File.getName() 会得到文件路径的 name 部分,与目录分开:
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
s,这些方法现在或将来可能会派上用场。您可以使用 substring() to peek inside the name, or even matches() 进行非常棘手的过滤。