Java:如何按文件名过滤传入的文件,而不是扩展?

时间:2017-09-18 02:29:38

标签: java mysql csv intellij-idea java-io

我目前有一个简单的程序,可以将数据插入到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格式,所以文件扩展名不是我关注的区域。

再次非常感谢!

2 个答案:

答案 0 :(得分:2)

听起来你想使用startsWith方法。

if (newPathFinal.startsWith("java"))
{
    // do java stuff
}
else if (newPathFinal.startsWith("apple"))
{
    // do apple stuff
}

答案 1 :(得分:2)

if语句只有“将完整的文件名作为条件”,如果你按照这种方式编程的话。使用FileString类提供的方法,您可以做更多事情。

首先,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()进行真正棘手的过滤。