将文件名与字符串进行比较

时间:2016-08-25 01:43:06

标签: java file

我在用Java编写的程序中遇到了障碍。该程序基本上将来自多个位置的文件夹和文件复制到一个文件夹中,以便更轻松地从计算机上的多个位置备份代码。我遇到的问题是我不想复制特定文件夹,在本例中为“workspace/.metadata”。我遇到问题的代码的开头如下:

public void copyFolder(File in, File out, String loc)
        throws IOException{

        String check = in.getName().substring(1);
        System.out.println("loc:"+loc+"check: "+check);
        if(loc.equals("java")){
            if(check.equals("metadata")){
                System.out.println("failboat");
                //statusBox.append("failboat");
            }
}

这是我看到的结果:

loc:java
check: orkspace2
loc:java
check: metadata
loc:java
check: lock

我已经看过其他代码并且他们同意它应该有效。我甚至在测试文件中创建了代码的副本:

String test = "fmetadata";
    String loc = "java";
    String check = test.substring(1);
    if(loc.equals("java")){
        if(check.equals("metadata")){
            System.out.print("failboat");
        }else{
            System.out.println("WTF");
            System.out.print(test+ ": :"+check); 
        }
}

结果呢?

failboat

我的办公桌前面有一个凹痕,试图弄明白这一点。

1 个答案:

答案 0 :(得分:1)

如果您发布的输出是实际输出:

loc:java
check: orkspace2
loc:java
check: metadata
loc:java
check: lock

它与您粘贴的代码不匹配,因为您不会在这两个项目之间打印换行符:

System.out.println("loc:"+loc+"check: "+check);

如果这是你所看到的真正的代码,那么我会说问题是loc最后有一个流浪换行符,而实际上是“java \ n”而不是“java”期望。因此,在调用该函数之前,您应该返回并检查如何生成通过loc开始的值。

如果是这种情况,那么一些有关诊断改进的建议可以帮助您更快地发现这些问题(除了逐步使用调试器):

// quote your strings to spot whitespace, print length to spot unexpected
// unprintable characters.
System.out.println("loc: \""+loc+"\" "+loc.length());
System.out.println("check: \""+check+"\" "+check.length());

if(loc.equals("java")){
    // make sure you're getting to this point, don't assume that the first
    // if condition was satisfied:
    System.out.println("grumpycat"); // <----
    if(check.equals("metadata")){
        System.out.println("failboat");
    }
}