当前位置: 技术问答>java相关
很简单的文件操作问题,菜鸟级的。
来源: 互联网 发布时间:2015-08-29
本文导语: 我想使每运行一下本程序就使count.txt(记数)中的数加1 可我怎么运行,count.txt中都是1??? import java.io.*; public class Hello{ public static void main(String[] args) throws IOException,FileNotFoundException{ File file=new File("count...
我想使每运行一下本程序就使count.txt(记数)中的数加1
可我怎么运行,count.txt中都是1???
import java.io.*;
public class Hello{
public static void main(String[] args) throws IOException,FileNotFoundException{
File file=new File("count.txt");
String str="";
BufferedWriter out=new BufferedWriter(new FileWriter(file));
BufferedReader in=new BufferedReader(new FileReader(file));
if((str=in.readLine())==null)
{out.write("1");
out.flush();
}
else
{int i=Integer.parseInt(str)+1;
out.write(i);
out.flush();
}
in.close();
out.close();
}
}
可我怎么运行,count.txt中都是1???
import java.io.*;
public class Hello{
public static void main(String[] args) throws IOException,FileNotFoundException{
File file=new File("count.txt");
String str="";
BufferedWriter out=new BufferedWriter(new FileWriter(file));
BufferedReader in=new BufferedReader(new FileReader(file));
if((str=in.readLine())==null)
{out.write("1");
out.flush();
}
else
{int i=Integer.parseInt(str)+1;
out.write(i);
out.flush();
}
in.close();
out.close();
}
}
|
当你使用BufferedWriter out=new BufferedWriter(new FileWriter(file));
语句时,因为没有指定打开文件的方式,所以默认为重新建立文件,所以原文件将被清空,然后你在用in.readline()读时,当然读到的是空文件,当然
str=in.readLine())==null ,
比较好的做法应该是先建立文件读取流,读文件,关闭流,处理数据,建立文件写入流,写文件,关闭流。
顺便提一句,每一句write()语句后不必用flush方法,这样就起不到buffer的作用了。那还不如就干脆使用FileWriter读写文件好了。
语句时,因为没有指定打开文件的方式,所以默认为重新建立文件,所以原文件将被清空,然后你在用in.readline()读时,当然读到的是空文件,当然
str=in.readLine())==null ,
比较好的做法应该是先建立文件读取流,读文件,关闭流,处理数据,建立文件写入流,写文件,关闭流。
顺便提一句,每一句write()语句后不必用flush方法,这样就起不到buffer的作用了。那还不如就干脆使用FileWriter读写文件好了。
|
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();
}
}
你每次都执行这个操作,都会重新建一个“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();
}
}
|
我觉得你原来的问题是由这个原因引起的:
当你用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();
}
}
当你用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();
}
}
|
因为你的str=in.readLine())==null 每次都满足,所以每次都写1。只是我不明白,为什么每次读出的都是null。