2013-04-02
展开全部
其他内容我就不写了,我只写关键的部分,假设你是会从 InputStream 里面读行的了,做法如下:
private synchronized String readLine(InputStreamReader reader) throws Throwable {
return reader.readLine();
}
也就是说,你把原来程序中直接读的地方,改成调用上面的函数,由该函数统一读行。
这样,不管是你有 N 个线程,还是一个线程,都不会发生读的行重复,或者读的行不完整的现象了。
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方法中调用这个方法的时候还是读的同一行
追答
等等,我写个例子给你。
展开全部
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();;
}
}
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();;
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
/**
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();
}
}
}
这个是我才写的 我刚才测试了 可以运行 也可以读取 你试试看 希望我的回答对楼主有所帮助 谢谢
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();
}
}
}
这个是我才写的 我刚才测试了 可以运行 也可以读取 你试试看 希望我的回答对楼主有所帮助 谢谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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();
}
}
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();
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询