Faire un fichier/dossier caché sur Windows avec Java
J'ai besoin de faire des fichiers et des dossiers cachés sur Windows et Linux. Je sais que y ajoutant un".'à l'avant d'un fichier ou d'un dossier le rendra caché sous Linux. Comment puis-je faire un fichier ou un dossier caché sur Windows?
7 réponses
Pour Java 6 et ci-dessous,
Vous devrez utiliser un appel natif, voici une façon pour windows
Runtime.getRuntime().exec("attrib +H myHiddenFile.java");
Vous devriez en apprendre un peu plus sur win32-api ou Java Native.
La fonctionnalité que vous désirez est une fonctionnalité de NIO.2 dans le prochain Java 7.
Voici un article décrivant comment il sera utilisé pour ce dont vous avez besoin: Gestion des métadonnées (attributs de fichier et de magasin de fichiers) . Il y a un exemple avec attributs de fichier DOS :
Path file = ...;
try {
DosFileAttributes attr = Attributes.readDosFileAttributes(file);
System.out.println("isReadOnly is " + attr.isReadOnly());
System.out.println("isHidden is " + attr.isHidden());
System.out.println("isArchive is " + attr.isArchive());
System.out.println("isSystem is " + attr.isSystem());
} catch (IOException x) {
System.err.println("DOS file attributes not supported:" + x);
}
Définir les attributs peut être fait en utilisant DosFileAttributeView
Compte tenu de ces faits, je doute qu'il existe un moyen standard et élégant d'accomplir cela en Java 6 ou Java 5.
Java 7 peut masquer un fichier DOS de cette façon:
Path path = ...;
Boolean hidden = path.getAttribute("dos:hidden", LinkOption.NOFOLLOW_LINKS);
if (hidden != null && !hidden) {
path.setAttribute("dos:hidden", Boolean.TRUE, LinkOption.NOFOLLOW_LINKS);
}
Java-s antérieur ne peut pas.
Le code ci-dessus ne lancera pas d'exception sur les systèmes de fichiers non DOS. Si le nom du fichier commence par un point, il sera également masqué sur les systèmes de fichiers UNIX.
C'est ce que j'utilise:
void hide(File src) throws InterruptedException, IOException {
// win32 command line variant
Process p = Runtime.getRuntime().exec("attrib +h " + src.getPath());
p.waitFor(); // p.waitFor() important, so that the file really appears as hidden immediately after function exit.
}
Sous windows, en utilisant java nio, Files
Path path = Paths.get(..); //< input target path
Files.write(path, data_byte, StandardOpenOption.CREATE_NEW); //< if file not exist, create
Files.setAttribute(path, "dos:hidden", Boolean.TRUE, LinkOption.NOFOLLOW_LINKS); //< set hidden attribute
Voici un exemple de code Java 7 entièrement compilable qui cache un fichier arbitraire sous Windows.
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.DosFileAttributes;
class A {
public static void main(String[] args) throws Exception
{
//locate the full path to the file e.g. c:\a\b\Log.txt
Path p = Paths.get("c:\\a\\b\\Log.txt");
//link file to DosFileAttributes
DosFileAttributes dos = Files.readAttributes(p, DosFileAttributes.class);
//hide the Log file
Files.setAttribute(p, "dos:hidden", true);
System.out.println(dos.isHidden());
}
}
Pour vérifier que le fichier est caché. Cliquez-droit sur le fichier en question et vous verrez, après l'exécution de la cour que le fichier en question est vraiment caché.
String cmd1[] = {"attrib","+h",file/folder path};
Runtime.getRuntime().exec(cmd1);
Utilisez ce code pour résoudre votre problème