2016-08-25 212 views
2

我在用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 

我的书桌上有一个凹痕,我的前额从试图弄清​​楚这一点。

+0

发布后不久,我发现了换行符。谢谢 – Sean

回答

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"); 
    } 
}