将文件名与字符串比较
问题描述:
我在用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
我的书桌上有一个凹痕,我的前额从试图弄清楚这一点。
答
如果您张贴输出的实际输出:
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");
}
}
发布后不久,我发现了换行符。谢谢 – Sean