「java多线程读写文件」多线程写入文件
今天给各位分享java多线程读写文件的知识,其中也会对多线程写入文件进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
java多线程读写文件
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();
}
}
“java”中多线程按行读取txt且每个线程读的内容不能重复,这么求“demo”?
你把原来程序中直接读的地方,改成调用上面的函数,由该函数统一读行。这样,不管是你有 N 个线程,还是一个线程,都不会发生读的行重复,或者读的行不完整的现象了。
为了充分利用多线程读取,就需要把文件划分成多个区域,供每个线程读取。那么就需要有一个算法来计算出每个线程读取的开始位置和结束位置。那么首先根据配置的线程数和文件的总长度计,算出每个线程平均分配的读取长度。
但是有一点,由于文件是纯文本文件,必须按行来处理,如果分割点在某一行中间,那么这一行数据就会被分成两部分,分别由两个线程同时处理,这种情况是不能出现的。所以各个区域的结束点上的字符必须是换行符。第一个区域的开始位置是0,结束位置首先设为(文件长度/线程数),如果结束点位置不是换行符,就只能加1,直到是换行符位置。
如果多线程操作,那么需要保证多个线程操作同一个对象,此外请保证先有线程放进内容,其他线程才能拿出数据。
附上具体参考代码:
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();;
}
}
java多线程同时读取一个文件,这个方法可行吗?
不可行。每次读取文件都需要创建缓存文件流,很占内存,而且多次读取实际上也是一个文件,还不如直接读取文件,之后通过条件多次获取需要的内容来的实际。
可以通过BufferedReader
流的形式进行流缓存,之后通过readLine方法获取到缓存的内容。
BufferedReader
bre
=
null;
try
{
String
file
=
"D:/test/test.txt";
bre
=
new
BufferedReader(new
FileReader(file));//此时获取到的bre就是整个文件的缓存流
while
((str
=
bre.readLine())!=
null)
//
判断最后一行不存在,为空结束循环
{
System.out.println(str);//原样输出读到的内容,此处可以添加条件进行不同的处理
};
备注:
流用完之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。
关于java多线程读写文件和多线程写入文件的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-24,除非注明,否则均为
原创文章,转载请注明出处。