2016-11-29 1 views
1

C'est ma méthode qui compresse le fichier dans une archive:Comment verrouiller le fichier pour un autre fils

public void addFilesToArchive(File source, File destination) throws 
IOException, ArchiveException { 

    try (FileOutputStream archiveStream = new FileOutputStream(destination); 
      ArchiveOutputStream archive = new ArchiveStreamFactory() 
        .createArchiveOutputStream(getType(), archiveStream)) { 

     updateSourceFolder(source); 
     generateFileAndFolderList(source); 

     for (String entryName : fileList) { 
      ArchiveEntry entry = getEntry(entryName); 
      archive.putArchiveEntry(entry); 
      archive.closeArchiveEntry(); 
     } 
    } 
} 

FILELIST conatains tous la hiérarchie des fichiers (dossier et fichiers)

Je veux éviter la compression de différents fils dans une destination en même temps.

Essayez d'utiliser:

FileChannel channel = archiveStream.getChannel(); 
channel.lock(); 

mais il ne semble pas être utile. Comment puis-je résoudre ce problème?

Répondre

1

Vous essayez de verrouiller le fichier contre d'autres threads , pas d'autres processus, et c'est exactement ce que les verrous de fichiers ne font pas. Voir le Javadoc. Vous devez utiliser la synchronisation ou les sémaphores.