以下是代码段。
read = new FileReader("trainfiles/"+filenames[i]);
br = new BufferedReader(read);
while((lines = br.readLine())!=null){
st = new StringTokenizer(lines);
while(st.hasMoreTokens()){
bw = new BufferedWriter(new FileWriter("files/file.txt"));
bw.write(st.nextToken());
bw.newLine();
}
}
编辑: 我正在从目录中读取文件。所以,我需要在每个循环中打开阅读器。我做了一些修改,但后来也没有写入该文件。 这是代码:
for(i=0;i==0;i++){
if(filenames[i].matches(".*ham.*")){
System.out.println("ham:"+filenames[i]);
read = new FileReader("trainfiles/"+filenames[i]);
br = new BufferedReader(read);
while((lines = br.readLine())!=null){
st = new StringTokenizer(lines);
while(st.hasMoreTokens()){
System.out.println(st.nextToken());
bw.write(st.nextToken());
}
}
bw.close();
br.close();
}else{
System.out.println("spam:"+filenames[i]);
}
}
编辑: 我修改了代码,但没有成功,
while((lines = br.readLine())!=null){
st = new StringTokenizer(lines);
bw = new BufferedWriter(new FileWriter("files/file.txt"));
while(st.hasMoreTokens()){
System.out.println(st.nextToken());
bw.write(st.nextToken());
}
bw.close();
}
br.close();
我收到此错误:Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(StringTokenizer.java:332)
at Test.main(Test.java:30)
编辑: 谢谢你们......我明白了。实际上我在eclipse中创建了一个目录,但我没有刷新它以查看内容。它很傻......反正很感激。
答案 0 :(得分:15)
有几件事:
答案 1 :(得分:12)
你的内循环应该是这样的:
try (BufferedWriter bw = new BufferedWriter(new FileWriter("file.txt"))) {
while (st.hasMoreTokens()) {
bw.write(st.nextToken());
bw.newLine();
}
}
答案 2 :(得分:0)
理想情况下,您应该使用以下构造函数来创建FileWriter
,
bw = new BufferedWriter(new FileWriter("files/file.txt",true));
第二个参数true
用于追加新数据。 FileWriter
不会截断您之前的写作。
您的读者将能够阅读正确的数据。