IO死循环问题求教

SignLCF 2012-12-14 02:19:38
String sPath = "D:/sqlnet.sql";
String sReader = "";
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(sPath)));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(sPath)));

while((sReader=br.readLine()) != null){
System.out.println(sReader);
bw.write(sReader);
bw.newLine();
bw.flush();
}
System.out.println("-------------------------------");

br.close();
bw.close();

以上是事例代码。
简单的带缓冲区的读写流,只是他的读写对象是同一个文件(sPath),先读,在向这个文件里写。
问题来了,当这个文件(sPath)内容稍微多一点(或则这个程序重复执行几次),就会出现死循环问题。
求解怎么会出现这样结果。
...全文
309 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxj828282 2012-12-20
  • 打赏
  • 举报
回复
top toptop
huangzebiao007 2012-12-20
  • 打赏
  • 举报
回复
建议楼主把读出来的数据先存到一个List集合中,读完后把输入流关闭,再用输出流关联文件,把集合中的数据写入 你可以参考下下面这段代码:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Test {

	public static void main(String[] args) throws IOException {
		List<String> list = new ArrayList<String>();
		BufferedReader br = new BufferedReader(new FileReader("ddd.txt"));
		String line = null;
		while((line=br.readLine())!=null){
			System.out.println(line);
			list.add(line);
		}
		br.close();
		BufferedWriter bw = new BufferedWriter(new FileWriter("ddd.txt"));
		for(String str : list){
			bw.write(str);
			bw.newLine();
			bw.flush();
		}
		bw.close();	
	}

}

xiaozhu1991 2012-12-15
  • 打赏
  • 举报
回复
debug一下,看看每次循环sReader的内容到底是什么,另外一个潜在问题就是对同一个文件,读写位置有没有影响。把这两个问题先测试一下呗
fish8245 2012-12-15
  • 打赏
  • 举报
回复
好奇怪的需求!对同一个文件同时进行读写本来就很奇怪!!!
杀木马 2012-12-14
  • 打赏
  • 举报
回复
A从盒子拿一个苹果,然后放进去,在从里面拿一个苹果,在放进去!以前我记录产生的流水好的时候碰到过这个问题。解决办法还是用4楼的办法解决的
  • 打赏
  • 举报
回复
就好像2楼说的 while(true){ 读--->写--->读---->写 }
  • 打赏
  • 举报
回复
如果文件大的话,应该是你读取文件的速度和往文件里写内容的速度是一样的要不就没有往里写内容的时候快,这样就容易出现死循环,如果是重复执行的话有可能是线程抢占CPU时间片的问题,这个试着用线程同步来解决 建议楼主用俩个文件,如果必须用一个的话,那就用线程同步做一下吧
  • 打赏
  • 举报
回复
br.close(); bw.close();你应该想想这两句应该放在哪呢???你在一个循球里先读后写,再读,当你下次读的时候,BufferedWriter 是没有关闭的,所以跟本写不于是去啊,读出来的还是原来的东西,所以老是不为空。。。反正我是这么想的,对不对我不知道,你试一下吧
安特矮油 2012-12-14
  • 打赏
  • 举报
回复
读了写,写了读.....可能是这样造成的
aotian16 2012-12-14
  • 打赏
  • 举报
回复
为什么要在同一个文件上操作啊?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧