【问题标题】:Java: how to filter incoming files by filename, not extensions?Java:如何按文件名过滤传入文件,而不是扩展名?
【发布时间】:2018-02-26 11:42:30
【问题描述】:

我目前有一个简单的程序,可以像这样将数据插入到 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 语句,因为我将文件名规定为字符串,但我意识到 if-else 语句将完整的文件名作为条件,这在我想要的情况下不起作用按部分文件名过滤。像这样:if(newPathfinal == “apple" {} 我希望将所有包含单词“apple”的文件导入到某个表中。

例如,假设我想将名称以“java”开头的文件(如 java_1)导入 mySQL 表 java1。并将名为“apple”的文件(如 apple_1)放入 apple1。 java_2 和 apple_2 继续被导入,我需要将它们相应地过滤到正确的 LOAD DATA LOCAL INFILE 语句中,以将它们的数据插入到正确的表中。

有什么方法可以按部分文件名过滤吗?我阅读了 jfilechooser 和 fileFilter 但这些似乎集中在文件扩展名上,这不是我关注的领域,因为文件都是相同的 .csv 格式。

再次感谢!

【问题讨论】:

  • 所以您只想更改您的if(newPathfinal == “ 行以按部分名称过滤,差不多吗?
  • 是的!我的困惑是我很确定 if-else 循环仅适用于全名,即。必须是 apple.csv 但不是 apple_1.csv。对不起,我忘了删除不完整的 IF 语句
  • 随意编辑该行。
  • 我找到了一个可能有帮助的链接,它是子字符串:stackoverflow.com/questions/15402101/… 我会阅读此内容并在此处报告是否有效!
  • 子字符串会起作用,就像我的回答一样。

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


【解决方案1】:

听起来您想使用startsWith 方法。

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

【讨论】:

    【解决方案2】:

    if 语句仅“将完整文件名作为条件”,如果您以这种方式对其进行编程。使用FileString 类中提供的方法,您可以做更多事情。

    首先,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() 来查看名称,甚至可以使用matches() 进行非常棘手的过滤。

    【讨论】:

      猜你喜欢
      • 2022-01-06
      • 1970-01-01
      • 2010-10-07
      • 2016-12-06
      • 2020-11-02
      • 1970-01-01
      • 2017-01-27
      • 2013-07-02
      • 2020-03-30
      相关资源
      最近更新 更多