У меня небольшое приложение (.ear), развернутое в профиле свободы.Один из компонентов ищет в csv-файлах общий каталог Windows, после обработки переместите его.Я использую SMBJ для выполнения этой работы (скопируйте в dest и затем удалите его).Приложение просыпается каждую минуту, чтобы выполнить эту задачу.Как только файл прочитан, он копирует файл в dest, но при удалении помечает для удаления, а не удаляет его.
Вторая итерация задания снова выбирает этот файл и не может прочитать, так как он помечен для удаления.Мне сказали закрыть дескриптор файла, и мой код обрабатывает все это, и все же я сталкиваюсь с проблемами.Может кто-нибудь сказать мне, что я здесь делаю не так.
public boolean moveFile(String srcFilePath, String destFilePath) {
try {
DiskShare srcShare=null, destShare=null;
Connection srcConnection=null, destConnection=null;
Session srcSession=null, destSession=null;
String srcPath=null, destPath=null;
SMBClient client = new SMBClient();
String srcParts[] = getPartsOfSharedPath(srcFilePath);
srcConnection = client.connect(srcParts[0]);
srcSession = srcConnection.authenticate(auth);
srcShare = (DiskShare)srcSession.connectShare(srcParts[1]);
srcPath = srcParts[2];
String destParts[] = getPartsOfSharedPath(destFilePath);
destConnection = client.connect(destParts[0]);
destSession = destConnection.authenticate(auth);
destShare = (DiskShare)destSession.connectShare(destParts[1]);
destPath = destParts[2];
//System.out.println("Remote to Remote");
Set<SMB2ShareAccess> s = new HashSet<>();
s.add(SMB2ShareAccess.ALL.iterator().next());
try(com.hierynomus.smbj.share.File srcFile = srcShare.openFile(srcPath, EnumSet.of(AccessMask.GENERIC_READ), null, s, SMB2CreateDisposition.FILE_OPEN, null);
InputStream in = srcFile.getInputStream();
com.hierynomus.smbj.share.File destFile = destShare.openFile(destPath, EnumSet.of(AccessMask.GENERIC_WRITE), null, SMB2ShareAccess.ALL, SMB2CreateDisposition.FILE_OVERWRITE_IF, null);
OutputStream out = destFile.getOutputStream()){
int bytesRead;
byte[] buffer = new byte[1024];
while((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
out.flush();
}catch(IOException ex){
logger.logError("", ex);
}
}
client.close();
return deleteFile(srcFilePath);
} catch(SMBApiException | IOException e){
logger.logError("",e);
}
return false;
}
public boolean deleteFile(String fileName){
try{
String srcParts[] = getPartsOfSharedPath(fileName);
try (SMBClient client = new SMBClient();
Connection srcConnection = client.connect(srcParts[0]);
Session srcSession = srcConnection.authenticate(auth);
DiskShare srcShare = (DiskShare)srcSession.connectShare(srcParts[1])) {
srcShare.rm(srcParts[2]);
return true;
}
}
catch(IOException ex){
logger.logError("",ex);
}
return false;}