【问题标题】:Check a file path contains a specific directory name in it检查文件路径中是否包含特定的目录名称
【发布时间】:2015-05-13 05:42:58
【问题描述】:

我正在使用从 svn 签出的目录。

HelloWorld项目

  • 源代码
  • 图片

我正在使用 commons-io 手动将整个文件从 images 目录复制到一个目录

for (String fileFromList : imageFiles) {
    FileUtils.copyFile(new File(fileFromList) , new File(destinationFile));
}

图像中的所有文件(包括 .svn)也会被复制。有没有办法排除包含目录名称.svn的文件?我可以使用fileFromList.contains(".svn"),但如果有像image.svn.check.jpg 这样的文件名也会被排除在外。有什么方法可以识别包含特定目录名称的文件路径。

如果我的理解有误,请纠正我。我搜索得足够多,我找不到这个问题的答案。如果是重复的,我很抱歉浪费了你的时间。

【问题讨论】:

标签: java file


【解决方案1】:

试试这个:

for (String fileFromList : imageFiles) {
    if (!fileFromList.contains("/.svn/")
      FileUtils.copyFile(fileFromList , destinationFile);
}

【讨论】:

  • 我觉得,String.contains 是有风险的。我想避免它。
  • @Pasupathi 我不认为,所以如果你使用斜线环绕,你可以确定它不是文件名的一部分。
【解决方案2】:

如果您想排除以“.svn”结尾的文件,这将起作用:

for (String fileFromList : imageFiles) {
        if(!fileFromList.endsWith(".svn")){ 
            FileUtils.copyFile(new File(fileFromList) , new File(destinationFile));
        }
    }

如果你想检查一个文件不在在一个名为“.svn”的目录中(例如C://.svn/test.jpg)你应该使用:

for (String fileFromList : imageFiles) {
        if(!fileFromList.contains("/.svn/")){ 
            FileUtils.copyFile(new File(fileFromList) , new File(destinationFile));
        }
    }

【讨论】:

  • 没有必要使用File.separator。在所有操作系统上,java 使用正常的斜线来分隔路径。
  • 我认为这甚至可能是不正确的。因为您正在比较字符串。如果 Java 返回带有斜杠的文件路径并且您查找反斜杠,它就会失败。
【解决方案3】:

Path 扩展 Iterable ,因此您可以对其进行迭代并检查是否有任何部分以或等于某些条件结束

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-23
    • 2011-08-22
    • 1970-01-01
    • 2019-03-18
    • 2019-07-14
    • 2011-05-04
    • 2017-02-01
    • 1970-01-01
    相关资源
    最近更新 更多