Pergunta

Eu preciso fazer pastas e arquivos ocultos no Windows e Linux. Eu sei que acrescentar um '' à frente de um arquivo ou pasta irá torná-lo escondido no Linux. Como posso fazer um arquivo ou pasta oculta no Windows?

Foi útil?

Solução

Para Java 6 e abaixo,

Você vai precisar usar uma chamada nativa, aqui é uma maneira de janelas

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

Você deve aprender um pouco sobre win32-api ou Java Native.

Outras dicas

A funcionalidade que você deseja é uma característica da NIO.2 no próximo Java 7.

Aqui está um artigo descrevendo como ele será usado para o que você precisa: Gerenciamento de Metadados (File e File Store Atributos) . Há um exemplo com Arquivo DOS Atributos :

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

Definição de atributos pode ser feito usando DosFileAttributeView

Considerando estes fatos, eu duvido que há uma maneira padrão e elegante para conseguir isso em Java 6 ou Java 5.

Java 7 pode esconder um arquivo DOS desta maneira:

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

anteriores java-s não pode.

O código acima não vai lançar uma exceção em sistemas de arquivos não-DOS. Se o nome do arquivo começa com um período, então ele irá também ser escondidas em sistemas de ficheiros UNIX.

este é o que eu 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.
}

no Windows, usando java nio, Arquivos

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

Aqui é um Java 7 exemplo de código totalmente compilável que esconde um arquivo arbitrário no 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());

    }
 } 

Para verificar o arquivo está escondido. Clique com o botão direito do mouse sobre o arquivo em questão e você verá após a execução do tribunal que o arquivo em questão está realmente escondido.

enter descrição da imagem aqui

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

Use este código pode resolver o seu problema

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top