2009-08-18 16 views
21

Ho bisogno di rendere i file e le cartelle nascosti su Windows e Linux. So che aggiungendo un '.' in primo piano un file o una cartella lo renderà nascosto su Linux. Come faccio a nascondere un file o una cartella su Windows?Crea un file/cartella nascosto su Windows con Java

risposta

19

Per Java 6 e sotto,

Sarà necessario utilizzare una chiamata nativa, qui è un modo per le finestre

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

Si dovrebbe imparare un po 'di Win32 API o Java Native.

+4

"nativo" significa che si sta eseguendo codice specifico della piattaforma. 'exec()' attiva una shell DOS/Windows per eseguire un programma DOS/Windows. –

+0

Sei un risparmiatore di vita !!! –

+0

cosa succede quando questo codice viene eseguito in Linux? O come lo prevengo? – Xerus

20

La funzionalità che si desidera è una caratteristica di NIO.2 nel prossimo Java 7.

Ecco un articolo che descrive come sarà utilizzato per quello che ti serve: Managing Metadata (File and File Store Attributes). C'è un esempio con 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); 
} 

impostazione attributi può essere fatto utilizzando DosFileAttributeView

Considerando questi fatti, dubito che ci sia uno standard e modo elegante per realizzare questo in Java 6 o Java 5.

3

questo è quello che uso:

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 può nascondere un file DOS in questo modo:

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

In precedenza Java non può.

Il codice precedente non genera un'eccezione su sistemi di file non DOS. Se il nome del file inizia con un punto, sarà nascosto anche sui sistemi di file UNIX.

+0

Il metodo getAttribute (String, LinkOption) non è definito per il tipo java.nio.file.Path (JDK 7u13) – Antonio

+1

Antonio, deve essere stato così nella versione bozza di Java 7 che ho utilizzato. Vedo che la funzionalità simile è ora in java.nio.file.Files. –

+5

È possibile utilizzare 'Files.setAttribute' che accetterà un' Percorso' su cui impostare l'attributo. –

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

Usa questo codice si potrebbe risolvere si problema

2

sulle finestre, utilizzando Java nio, file

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

Aggiungi una descrizione di come il codice che hai postato risponde alla domanda dell'utente – Suever

1

Ecco un codice Java 7 di esempio completamente compilabile che nasconde un file arbitrario su 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()); 

    } 
} 

Per verificare che il file sia nascosto. Fai clic destro sul file in questione e vedrai dopo l'esecuzione del tribunale che il file in questione è veramente nascosto.

enter image description here

Problemi correlati