我正在从某个位置读取 csv 文件。
您能否告诉我,如果在这种情况下找不到文件,如何停止生产者线程和消费者线程?
下面是我的程序,它创建两个线程,生产者线程和消费者线程来从文件读取数据
package com.util;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.PipedReader;
import java.io.PipedWriter;
import au.com.bytecode.opencsv.CSVReader;
public class TestProgram {
public static void main(String args[]) {
final String startToken = ",Nifty 50 Gainers";
final String endToken = "50 Losers";
final PipedWriter pipedWriter = new PipedWriter();
PipedReader pipedReaderTmp = null;
try {
pipedReaderTmp = new PipedReader(pipedWriter);
} catch (IOException e) {
}
final PipedReader pipedReader = pipedReaderTmp;
// Consumer
new Thread(new Runnable() {
@Override
public void run() {
try {
CSVReader csvReader = new CSVReader(pipedReader);
while (true) {
String[] line = csvReader.readNext(); // blocks until the next line is available
if (line == null)
break; // end of stream has been reached
if (line != null && line.length > 3) {
String indices_name = line[1];
if (indices_name != null) {
System.out.println(indices_name);
}
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
// Producer
new Thread(new Runnable() {
@Override
public void run() {
try {
BufferedReader br = new BufferedReader(new FileReader(
"C:\\Users\\ravikiranv\\Downloads\\MA050116.csv"));
String line = null;
while ((line = br.readLine()) != null) {
if (startToken.equals(line))
break;
}
while ((line = br.readLine()) != null) {
if (line.contains((endToken))) {
break;
} else {
pipedWriter.write(line + '\n');
}
}
pipedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
}
最佳答案
请参阅 PipedReader.read() 的 Javadoc
.
Throws: IOException - if the pipe is broken, unconnected, closed, or an I/O error occurs.
所以只要关闭
它,另一端就会得到一个IOException
。
注意:PipedReader
有一些 issues - 您可能会发现使用“BlockingQueue”之类的东西更安全/更好。
关于java - 发生 FileNotException 时如何停止生产者线程和消费者线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34880737/