2009-08-18 7 views

Répondre

19

Pour Java 6 et ci-dessous,

Vous aurez besoin d'utiliser un appel natif, voici une façon pour les fenêtres

Runtime.getRuntime().exec("attrib +H myHiddenFile.java"); 

Vous devriez apprendre un peu plus sur win32 api-ou Java Native.

+4

"native" signifie que vous utilisez la plate-forme code spécifique. 'exec()' déclenche un shell DOS/Windows pour exécuter un programme DOS/Windows. –

+0

Vous êtes un épargnant de vie !!! –

+0

que se passe-t-il lorsque ce code est exécuté sous Linux? Ou comment puis-je l'empêcher? – Xerus

20

La fonctionnalité que vous désirez est une caractéristique de NIO.2 dans le prochain Java 7.

Voici un article qui décrit comment il sera utilisé pour ce dont vous avez besoin: Managing Metadata (File and File Store Attributes). Il y a un exemple avec DOS File Attributes:

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); 
} 

attributs réglage peut être effectué à l'aide DosFileAttributeView

Compte tenu de ces faits, je doute qu'il ya une manière standard et élégante pour y parvenir en Java 6 ou Java 5.

3

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. 
} 
13

Java 7 peut cacher un fichier DOS ainsi:

Path path = ...; 
Boolean hidden = path.getAttribute("dos:hidden", LinkOption.NOFOLLOW_LINKS); 
if (hidden != null && !hidden) { 
    path.setAttribute("dos:hidden", Boolean.TRUE, LinkOption.NOFOLLOW_LINKS); 
} 

Plus tôt Java-s ne peut pas.

Le code ci-dessus ne déclenchera 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.

+0

La méthode getAttribute (String, LinkOption) est indéfinie pour le type java.nio.file.Path (JDK 7u13) – Antonio

+1

Antonio, ça doit être comme ça dans la version préliminaire de Java 7 que j'ai utilisée. Je vois que la fonctionnalité similaire est maintenant dans java.nio.file.Files. –

+5

Vous pouvez utiliser 'Files.setAttribute' qui acceptera un' Path' pour définir l'attribut. –

0
String cmd1[] = {"attrib","+h",file/folder path}; 
Runtime.getRuntime().exec(cmd1); 

Utilisez ce code, il pourrait vous résoudre le problème

2

sur les fenêtres, en utilisant nio java, fichiers

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

Veuillez ajouter une description de la façon dont le code que vous avez posté répond à la question de l'utilisateur – Suever

1

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é. Faites un clic droit sur le fichier en question et vous verrez après l'exécution du tribunal que le fichier en question est vraiment caché.

enter image description here

Questions connexes