Я написал прослушиватель, который постоянно слушает очередь, по мере поступления сообщения он должен записать это сообщение в файл.java.io.FileNotFoundException: процесс не может получить доступ к файлу, потому что он используется другим процессом)
@Override
public void handleDelivery(String consumerTag,
Envelope envelope,
AMQP.BasicProperties properties,
byte[] body) throws IOException {
String response = new String(body);
String routingKey = envelope.getRoutingKey();
String contentType = properties.getContentType();
String correlationId = properties.getCorrelationId();
System.out.println("response "+ counter+ " :: "+ response);
try {
ResponseWriter.responseWrite(response, correlationId);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Runnable task = new VariableLengthTask(this, envelope.getDeliveryTag(), channel, 1000);
executorService.submit(task);
}
линия выше метода
ResponseWriter.responseWrite(response, correlationId);
позвонит ниже способом:
File file =new File(defaultExcelPath);
FileOutputStream fop = null;
PrintWriter writer = null;
synchronized(file) {
try {
List<String> datalist = new ArrayList<String>();
// add details to datalist....
// write to the file ..
.....
.....
.....
fop = new FileOutputStream(defaultExcelPath, true);
writer = new PrintWriter(fop);
for(String data : datalist) {
writer.println(data);
}
writer.close();
} catch (Exception e) {
// TODO Auto-generated catch block
//e.printStackTrace();
throw e;
} finally {
if(fop!= null) fop.close();
if(writer!= null) writer.close();
}
}
, но из-за метода обработчика листинга более 100 сообщений в несколько секунд, метод записи файла броски ниже исключения
java.io.FileNotFo undException: C: \ Files \ performanceEvaluator.csv (Процесс не может получить доступ к файлу, так как он используется другим процессом)
как я могу сделать код, который запись в файл одновременно (или любым другим способом. .)
вы не синхронизируются на том же файле, каждый вызов метода создать новый файловый объект и устанавливает блокировку на этот новый объект, поэтому он не синхронизируются, попробуйте синхронизации на 'responseWrite', поскольку его статический метод просто сделать его синхронизировано –