Problème : Depuis, nous savons que le fichier avec l' attribut immuable ensemble, ne peut pas être effacée par tout utilisateur. Même Le super-utilisateur ne peut pas supprimer le fichier suivant.
Maintenant, pour être en mesure de supprimer le fichier que vous devez supprimer l'attribut immuable et puis supprimez le fichier.
Maintenant, ce que vous avez à faire est d'appliquer la commande shell à travers le code et supprimer l'attribut immuable sur le fichier.
Comme vous l'avez mentionné la croix-plate-forme de question
Donc l'algo de base serait
Étape 1: Détecter le système d'exploitation que vous utilisez
exemple de code serait:
private static String OS = System.getProperty("os.name").toLowerCase();
if(OS.indexOf("win") >= 0)
//your code for windows OS.
else if(OS.indexOf("mac") >= 0)
//your code for MAC OS.
else if(OS.indexOf("sunos") >= 0)
//your code for Solaris OS
Note: je n'ai pas ajouté de code de vérification de tous les OS. Alors jetez un oeil par vous-même.
Etape 2: Cette étape vous aide à résoudre la Croix-plate-forme de question
Problème de l'environnement appropriée commande grâce à l' java.lang.Runtime.exec
pour supprimer l'attribut immuable du fichier.
Regarder le java.lang.Moment de l'exécution.exec.
java.lang.Moment de l'exécution.exec : Grâce à cela, vous offre l'environnement appropriée de commande pour n'importe quel Environnement, que ce soit MAC, Windows, Linux, etc.
exemple de code serait
//if the OS detected is Linux then
Process p = Runtime.getRuntime().exec("chattr -i /path/to/file");
//Play with the process as you would like to, using the documentation.
//else if the OS detected is OSX then : example to unlock in OSX
Process p = Runtime.getRuntime().exec("chflags nouchg /path/to/file");
//Play with the process as you would like to, using the documentation.
//else if the OS detected is say Windows then : example to unlock in Windows
Process p = Runtime.getRuntime().exec("ATTRIB -s -h /path/to/file");
//-s -h are used to unlock and unhide (i dont the Antonym of hide :p ) the file in windows
//Play with the process as you would like to, using the documentation.
Remarque: Pour exécuter d'autres commandes shell qui comprennent des tuyaux vous pouvez utiliser ce genre de code:
Process p = Runtime.getRuntime().exec(new String[]{"csh","-c","cat /home/narek/pk.txt"});
Étape 3: Utiliser le même moment de l'Exécution.exec() pour vérifier si l'attribut immuable a été supprimé ou non, comme ceci:
Process p = Runtime.getRuntime().exec("lsattr /whateverPath");
//Play with the process to check whether the attribute is set or not, using the documentation.
Étape 4: Si l'étape 3 est de type " vrai|faux, quelle que soit la logique d'appliquer, puis Supprimez le fichier à l'aide de votre commande, en utilisant à nouveau le moteur d'Exécution.exec().
La chose est d'avoir un regard sur les ci-dessus liés à la documentation de java.lang.Moment de l'exécution.exec et de travailler avec elle.
s'il vous plaît, laissez-moi savoir si il a contribué dans une certaine mesure, ou pas.