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
}

这只是简单的事情。您可以通过各种方法检查和测试 Strings,这些方法现在或将来可能会派上用场。您可以使用 substring() to peek inside the name, or even matches() 进行非常棘手的过滤。