2016-08-25 396 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"); 
    } 
}