2009-08-18 17 views

Odpowiedz

19

Dla Java 6 i poniżej,

Trzeba będzie użyć natywnego połączenia, tutaj jest jednym ze sposobów na okna

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

Należy nauczyć się trochę o Win32 API lub Java Native.

+4

"natywny" oznacza używasz kodu konkretnej platformy. 'exec()' uruchamia powłokę DOS/Windows, aby uruchomić program DOS/Windows. –

+0

Jesteś oszczędzającym życie !!! –

+0

co się stanie, gdy ten kod zostanie wykonany w systemie Linux? Lub jak mogę temu zapobiec? – Xerus

20

Funkcjonalność, że pragnienie jest cechą NIO.2 w nadchodzącym Java 7.

Oto artykuł opisujący w jaki sposób będzie on używany do czego potrzebujesz: Managing Metadata (File and File Store Attributes). Jest to przykład z 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); 
} 

Ustawianie atrybuty mogą być wykonywane przy użyciu DosFileAttributeView

Biorąc pod uwagę te fakty, wątpię, że istnieje norma i elegancki sposób, aby to osiągnąć w Java 6 lub Java 5.

3

to co używam:

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 można ukryć DOS plik w ten sposób:

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

Wcześniejsze Java-y nie mogą.

Powyższy kod nie rzuci wyjątku w systemach plików innych niż DOS. Jeśli nazwa pliku zaczyna się kropką, to będzie również ukryta w systemach plików UNIX.

+0

Metoda getAttribute (String, LinkOption) jest niezdefiniowana dla typu java.nio.file.Path (JDK 7u13) – Antonio

+1

Antonio, tak mogło być w wersji roboczej Java 7, której użyłem. Widzę, że podobna funkcjonalność znajduje się teraz w pliku java.nio.file.Files. –

+5

Możesz użyć 'Files.setAttribute', który zaakceptuje' Path', aby ustawić atrybut na. –

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

użyć tego kodu może rozwiązać Ci problemem

2

na okna, przy użyciu java NIO, pliki

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

Dodaj opis tego, w jaki sposób wysłany kod odpowiada na pytanie użytkownika – Suever

1

Oto pełni compilable kod Java 7 próbka, która ukrywa dowolnego pliku w systemie 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()); 

    } 
} 

Aby sprawdzić, czy plik jest ukryty. Kliknij dany plik prawym przyciskiem myszy, a po egzekucji sąd zobaczy, że dany plik jest naprawdę ukryty.

enter image description here

Powiązane problemy