java 多线程按行读取txt 每个线程读的内容不能重复 求demo

求大神指点... 求大神指点 展开
 我来答
匿名用户
2013-04-02
展开全部
其他内容我就不写了,我只写关键的部分,假设你是会从 InputStream 里面读行的了,做法如下:

private synchronized String readLine(InputStreamReader reader) throws Throwable {
return reader.readLine();

}

也就是说,你把原来程序中直接读的地方,改成调用上面的函数,由该函数统一读行。
这样,不管是你有 N 个线程,还是一个线程,都不会发生读的行重复,或者读的行不完整的现象了。
更多追问追答
追问
private synchronized String read(BufferedReader reader) throws Throwable {
String str = "";
while (reader.readLine() != null) {
str = reader.readLine();
}
return str;
}

我在run方法中调用这个方法的时候还是读的同一行
追答
等等,我写个例子给你。
1997排长
高粉答主

2016-01-11 · 说的都是干货,快来关注
知道大有可为答主
回答量:1.1万
采纳率:0%
帮助的人:815万
展开全部
public class Test{
public static void main(String args[])throws Exception{
File file = new File("D:\\Test.java");//Text文件
BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件
String s = null;
while((s = br.readLine())!=null){//使用readLine方法,一次读一行
System.out.println(s);
}
br.close();;
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
731017882
2013-04-02 · TA获得超过166个赞
知道答主
回答量:356
采纳率:0%
帮助的人:151万
展开全部
/**
9. * 读取TXE数据
10. */
public class f {
public static void main(String arg[]) {
try {
String encoding = "GBK"; // 字符编码(可解决中文乱码问题 )
File file = new File("c:/aa.txt");
if (file.isFile() && file.exists()) {
InputStreamReader read = new InputStreamReader(
new FileInputStream(file), encoding);
BufferedReader bufferedReader = new BufferedReader(read);
String lineTXT = null;
while ((lineTXT = bufferedReader.readLine()) != null) {
System.out.println(lineTXT.toString().trim());
}
read.close();
}else{
System.out.println("找不到指定的文件!");
}
} catch (Exception e) {
System.out.println("读取文件内容操作出错");
e.printStackTrace();
}
}
}
这个是我才写的 我刚才测试了 可以运行 也可以读取 你试试看 希望我的回答对楼主有所帮助 谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友fc9fe86
2013-04-02 · 超过57用户采纳过TA的回答
知道小有建树答主
回答量:139
采纳率:0%
帮助的人:137万
展开全部
public static void main(String[] args) {
File data = new File("data.txt");
try {
InputStreamReader read = new InputStreamReader(new FileInputStream(
data), "UTF-8");
final BufferedReader bufferedReader = new BufferedReader(read);
for (int i = 0; i < 5; i++) {
new Thread(new Runnable() {
@Override
public void run() {
String lineTXT = null;
synchronized (bufferedReader) {
try {
while ((lineTXT = bufferedReader.readLine()) != null) {
System.out.println(Thread.currentThread()+":"+lineTXT);
bufferedReader.notify();
bufferedReader.wait();
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
bufferedReader.notifyAll();
}
}
}
}).start();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式