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?

22
demandé sur Nathan 2009-08-18 20:25:35

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.

21
répondu Andrew 2014-11-04 17:14:27

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.

22
répondu Marian 2009-08-18 19:15:30

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.

14
répondu Steve Emmerson 2010-06-12 16:04:23

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.
}
3
répondu Community 2011-12-08 15:22:46

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
2
répondu redlasha 2016-04-07 15:38:53

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é.

entrez la description de l'image ici

2
répondu Mark Burleigh 2017-03-15 17:25:40
String cmd1[] = {"attrib","+h",file/folder path};
Runtime.getRuntime().exec(cmd1);

Utilisez ce code pour résoudre votre problème

0
répondu Vighanesh Gursale 2013-05-15 21:03:28