2009-06-12 9 views
8

Je veux donner la valeur du mode d'autorisation "777" au fichier image en utilisant le code Java. Comment puis-je donner cela en utilisant Java? Parce que je ne peux pas supprimer l'image avec le mode d'autorisation par défaut "664".Comment changer le mode d'autorisation de l'image en 777 en utilisant le code Java?

+2

Suppression d'un fichier nécessite effectivement des autorisations d'écriture sur le répertoire parent, pas le fichier lui-même. Si l'utilisateur ou le groupe correspondant à 777 n'est pas mieux que 664 non plus. – jmanning2k

+0

Il n'y a aucune raison d'activer les bits d'exécution sur une image. Vous n'avez presque jamais besoin d'autorisations 777 sur n'importe quel type de fichier, et vous n'avez absolument jamais besoin de 777 sur un fichier non exécutable. – skiphoppy

Répondre

8

Vous pouvez utiliser la méthode 'exec' pour exécuter une commande externe pour faire le chmod.

Runtime.getRuntime().exec("chmod 777 myfile"); 
+0

pouvez-vous élaborer un peu? –

+0

Devrais-je donner le nom du chemin du fichier après 777
par exemple: Runtime.getRuntime(). Exec ("chmod 777 d: /sample.jpeg"); –

+2

Eh bien, si votre fichier est dans 'd: /sample.jpeg', cela ne fonctionnera probablement pas. chmod est une commande * nix et ne fonctionnera pas sur Windows à moins que vous ayez installé cygwin (ou un autre système unix/win32). Peut-être que vous avez posé la mauvaise question? – Kieveli

8

Vous pouvez créer un objet File associé au fichier change ensuite autorisations à l'aide setExecutable, setReadable et setWritable. Naturellement, ces opérations échoueront si votre programme n'a pas l'autorisation de modifier les autorisations d'accès pour le fichier.

+0

Je ne trouve aucune de ces méthodes. Je pourrais obtenir seulement la méthode setReadOnly() et j'utilise Java 1.4 si je ne peux pas changer le sdk –

+0

Si vous êtes limité à Java 1.4, je pense que vous devrez utiliser la commande exec. –

+1

@Raja: Désolé, il semble que ceux-ci faisaient partie de l'API Java 1.6 File. –

1

Malheureusement, Java donne peu de grab aux propriétés du fichier système, car cela viole la règle d'or de java «écrire une fois, courir partout».

En effet, lorsque vous écrivez que vous voulez mettre un 777 accès au fichier, cela signifie évidemment que vous êtes sous unix. Mais qu'est-ce qu'une telle demande aurait signifié sous Windows par exemple?

Il ne devrait donc pas être surprenant que pour traiter des sujets de système d'exploitation spécifiques, vous deviez utiliser des fonctions spécifiques. C'est le prix à payer lorsqu'on utilise un langage qui prétend (avec de fortes raisons) être "indépendant de la plate-forme"

Le moyen le plus sûr serait d'utiliser une bibliothèque JNI qui implémente exactement ce que vous voulez. Une manière simple mais sale et dangereuse serait d'utiliser Runtime.getRuntime(). Exec ("chmod 777 myFile").

Pourquoi dangereux? En fait, que se passe-t-il quand on appelle un tel exec ("blahblah")?

Le processus unix exécutant vos chaînes de programme Java; le processus "dupliqué" exécute alors un shell (ksh? csh? bash ?? cela dépend de votre configuration unix), qui essaie de comprendre et d'exécuter votre phrase "blahblah".

Si votre jvm utilise en fait 500 Mo, le processus fourchue serait la même taille quand il commence ...

le shell va commencer avec le même « contexte shell » que le processus java, qui est dire le même chemin, les alias et ainsi de suite. Même "chmod" aurait pu être aliasé, donc il vaudrait mieux appeler le chemin complet pour chmod (/ bin/chmod,/usr/bin/chmod ... ça dépend de la saveur unix ...). Pendant l'exécution du shell, votre programme java est gelé et vous n'avez aucun moyen de le débloquer si, pour une raison quelconque, le shell se bloque. Enfin, il n'est même pas sûr que le propriétaire du programme Java ait les droits suffisants pour modifier ces informations sur le fichier (il pourrait être autorisé à créer le fichier, mais pas pour changer les droits au niveau de l'utilisateur, par exemple). Peut-être que vous essayez de gérer au niveau java un problème qui devrait être résolu au niveau du système d'exploitation?

1

va Voici le code: -

List<String> chPermList = new LinkedList<String>(); 
chPermList.add("/bin/chmod"); 
chPermList.add("777"); 
chPermList.add(Path_to_image_file); 


    public void changePermission(List chPermList) 
    { 
     ProcessBuilder pb = null; 
     pb = new ProcessBuilder(chPermList); 
       pb.redirectErrorStream(true); 

       Process p = pb.start(); 

       BufferedReader br = new BufferedReader(new InputStreamReader(p 
         .getInputStream())); 

       p.waitFor(); 

       if(p.exitValue()!=0) 
       { 
        strExpMsg = "The permission change failed with exit value" + p.exitValue(); 

       } 
    }