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

求大神指点

其他内容我就不写了,我只写关键的部分,假设你是会从 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方法中调用这个方法的时候还是读的同一行

追答

等等,我写个例子给你。

追问

3q

追答

直接给你写了一个测试类,并发成图片了,你参考下内容的写法:


温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-01-11
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();;
}
}本回答被网友采纳
第2个回答  2013-04-02
/**
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();
}
}
}
这个是我才写的 我刚才测试了 可以运行 也可以读取 你试试看 希望我的回答对楼主有所帮助 谢谢
第3个回答  2013-04-02
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();
}
}