写了一个从A文件复制到B文件的例子,其中要求去掉重复的行。
于是想到了Set,这本来是很容易的事情,结果在向外写数据时抱错
java.util.NoSuchElementException
网络上反复查证也没有相关的内容,于是自己慢慢的找,终于找到了。下面写出这个错误的例子及分析,希望能及时的帮助和我同样犯了小错误的菜鸟!
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Step01 {
public static void main(String[] args) {
Set<String> set = new HashSet<String>();
File in = new File("Answer0712/aaa.txt");
File out = new File("Answer0712/bbb.txt");
InputStream is = null;
OutputStream os = null;
try {
is = new FileInputStream(in);
os = new FileOutputStream(out);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while (true) {
String str = br.readLine();
if (str == null)
break;
set.add(str);
}
// Iterator i = set.iterator();
// while(i.hasNext()){
// System.out.println("Null值判断:"+i.next());
// }
PrintWriter pw = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(os)), true);
Iterator i = set.iterator();
while (i.hasNext()) {
System.out.println(i.next()); //这一句是罪魁祸首
pw.println(i.next());
}
pw.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
is.close();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
文章中标示黄色的那一句,本来是要打印出来,在控制台看看所写的数据是否正确。
结果就出现了java.util.NoSuchElementException的错误提示 ,就是黄色的那一句,多了一个 迭代器的next()。
所以错了。去掉它就好了,或者改为
while (i.hasNext()) {
String ss = (String) i.next();
System.out.println(ss);
pw.println(ss);
}都可以解决问题。