BufferedWriter out=new BufferedWriter(new FileWriter(file)); 你每次都执行这个操作,都会重新建一个“count.txt”,当然每次都写1了。 还有,你写文件的时候用write(int), 读文件用readLine,根本就不匹配阿。import java.io.*; public class Hello{ public static void main(String[] args) throws IOException,FileNotFoundException{
File file=new File("count.txt"); String str="";
BufferedReader in=new BufferedReader(new FileReader(file)); str=in.readLine(); // here in.close(); BufferedWriter out=new BufferedWriter(new FileWriter(file)); if(str == null) {out.write("1"); out.flush(); } else {int i=Integer.parseInt(str)+1; out.write(""+i); // this one out.flush(); }
out.close(); } }
另外,你的out.write(i)也是不行的,这样会写入unicode值为i的字符,并不是数字的字符串,应该作如下转换:Integer.toString(i); 比如这样 import java.io.*; public class Hello{ public static void main(String[] args) throws IOException,FileNotFoundException{
语句时,因为没有指定打开文件的方式,所以默认为重新建立文件,所以原文件将被清空,然后你在用in.readline()读时,当然读到的是空文件,当然
str=in.readLine())==null ,
比较好的做法应该是先建立文件读取流,读文件,关闭流,处理数据,建立文件写入流,写文件,关闭流。
顺便提一句,每一句write()语句后不必用flush方法,这样就起不到buffer的作用了。那还不如就干脆使用FileWriter读写文件好了。
你每次都执行这个操作,都会重新建一个“count.txt”,当然每次都写1了。
还有,你写文件的时候用write(int), 读文件用readLine,根本就不匹配阿。import java.io.*;
public class Hello{
public static void main(String[] args) throws IOException,FileNotFoundException{
File file=new File("count.txt");
String str="";
BufferedReader in=new BufferedReader(new FileReader(file));
str=in.readLine(); // here
in.close();
BufferedWriter out=new BufferedWriter(new FileWriter(file)); if(str == null)
{out.write("1");
out.flush();
}
else
{int i=Integer.parseInt(str)+1;
out.write(""+i); // this one
out.flush();
}
out.close();
}
}
比如这样
import java.io.*;
public class Hello{
public static void main(String[] args) throws IOException,FileNotFoundException{
File file=new File("count.txt");
String str="";
BufferedReader in=new BufferedReader(new FileReader(file));
str=in.readLine();
in.close();
BufferedWriter out=new BufferedWriter(new FileWriter(file));
if(str==null)
{out.write("1");
}
else
{int i=Integer.parseInt(str)+1;
out.write(Integer.toString(i));
}
out.close();
}
}
当你用readLine()之后,该输入和输出流的当前点已经到了下一行,你再用write()方法写入的,只能是在下一行,而第一行还是null。所以你每次用readLine()得到的都是null。还有一点,就是netstarry(星光)说的write(i)的问题。
下面的做法可以解决你原来的问题,不过前提是count.txt文件已经存在:
import java.io.*;
public class Pass{
public static void main(String[] args) throws IOException,FileNotFoundException{ File file=new File("count.txt");
String str="";
BufferedWriter out=null; BufferedReader in=new BufferedReader(new FileReader(file));
if((str=in.readLine())==null)
{
out = new BufferedWriter(new FileWriter(file));
out.write("1");
out.flush();
}
else
{int i = Integer.parseInt(str)+1;
out = new BufferedWriter(new FileWriter(file));
out.write(new Integer(i).toString());
out.flush();
} in.close();
out.close();
}
}
out.write("1");
out.close把上述代码放到catch FileNotFoundException 块中,就行了
BufferedWriter out=new BufferedWriter(new FileWriter(file));
out.write("1");
out.close;
应该在什么地方去catch,也就是try的范围是什么,谢谢。
throws IOException,FileNotFoundException
就要改为 throws IOException 了,因为函数内部进行了FileNotFoundException异常的处理
但上面的程序我测试了一下还是发现有这个问题:
如果我先建立了一个count.txt空文件,那么为什么执行程序后,count.txt的值还是没有,但如果事先文件内容不为空,文件数值就能增加。不知为什么?
请帮忙能让存在空文件时就能往里记数,再次感谢!
public class Test {
public static void main(String[] args) throws IOException{
try{
File file=new File("count.txt");
String str="";
BufferedReader in=new BufferedReader(new FileReader(file));
str=in.readLine();
in.close();
BufferedWriter out=new BufferedWriter(new FileWriter(file));
if(str==null)
{out.write("1");
}
else
{int i=Integer.parseInt(str)+1;
out.write(Integer.toString(i));
}
out.close();
}
catch(FileNotFoundException e){
File file=new File("count.txt");
BufferedWriter out=new BufferedWriter(new FileWriter(file));
out.write("1");
out.close(); }
}
}