IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Obtenir l'accès à un fichier utilisé par un autre jar


Sujet :

Entrée/Sortie Java

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 149
    Points : 126
    Points
    126
    Par défaut Obtenir l'accès à un fichier utilisé par un autre jar
    Bonjour,

    Je développe en ce moment un programme (peu importe ce qu'il fait) auquel je voudrais ajouter une fonction backup. Celle-ci copierait tous les fichiers utilisés par un autre programme dans un fichier zip. Jusque là, aucun souci. C'est au moment où je commence la copie que évidemment l'accès m'est refusé car le jar les utilise. Serait-il possible de forcer la copie ou d'obtenir l'accès?

    Si besoin, voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
        				String folderPath = new File("").getAbsolutePath() + "/backups/";
        				File folder = new File(folderPath);
        				if (!folder.exists()) {
        					if (folder.mkdir()) {
        						getLogger().info("Backup folder created!");
        					} else {
        						getLogger().info("Failed to create backup folder...");
        					}
        				}
        				Calendar cal = Calendar.getInstance();
        				DateFormat dateFormat = new SimpleDateFormat("yyyy MM dd - HH mm ss");
        				String zipFile = new File("").getAbsolutePath() + "/backups/" + dateFormat.format(cal.getTime()) + ".zip";
        				File zip = new File(zipFile);
        	    		String srcDir = new File("").getAbsolutePath();
     
        	    		try {
     
        	    			byte[] buffer = new byte[1024];
     
        	    			File dir = new File(srcDir);
     
        	    			File[] files = dir.listFiles();
     
        					try {
    							zip.createNewFile();
    						} catch (IOException e) {
    							e.printStackTrace();
    						}
     
        	    			FileOutputStream fos = new FileOutputStream(zip);
     
        	    			ZipOutputStream zos = new ZipOutputStream(fos);
     
        	    			for (int i = 0; i < files.length; i++) {
        	    				if(!files[i].getName().contains("backups")) {
        	    				FileInputStream fis = new FileInputStream(files[i]);
     
        	    				zos.putNextEntry(new ZipEntry(files[i].getName()));
        	    				int length;
     
        	    				while ((length = fis.read(buffer)) > 0) {
        	    					zos.write(buffer, 0, length);
        	    				}
     
        	    				zos.closeEntry();
     
        	    				fis.close();
        	    				}
        	    			}
        	    			zos.close();
     
        	    		}
        	    		catch (IOException ioe) {
        	    			System.out.println("Error creating zip file" + ioe);
        	    		}

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 149
    Points : 126
    Points
    126
    Par défaut
    Petite info supplémentaire:

    Les fichiers se copient bien mais pas les dossiers...
    Peut-être devrais-je mettre le dossier en mémoire puis le coller dans le zip? Si c'est faisable, comment faire s'il vous plait?

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Sous windows, malheureusement, il faut que l'application qui utilise le fichier libère celui ci pour qu'une autre application puisse y avoir accès. C'est une limitation de l'OS incontournable il me semble.

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 149
    Points : 126
    Points
    126
    Par défaut
    J'ai pensé à une alternative: lancer un script BATCH depuis mon jar comme ça la copie s'effectue quand même. (en théorie)
    Mais je ne sais pas comment copier l'intégralité d'un dossier dans un zip avec un cette méthode sachant qu'en plus de cela, il faut sauter le dossier backups...

Discussions similaires

  1. Réponses: 7
    Dernier message: 07/07/2011, 23h04
  2. Copier un fichier utilisé par un autre processus
    Par shaun_the_sheep dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 29/12/2008, 15h45
  3. Réponses: 4
    Dernier message: 11/06/2008, 01h30
  4. [JNI] Fichier utilisé par un autre processus
    Par Julaie95 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 10/08/2006, 11h39
  5. Erreur "Fichier utilisé par un autre processus"
    Par solo3326 dans le forum Langage
    Réponses: 3
    Dernier message: 18/08/2005, 16h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo