Создайте скрытый файл / папку в Windows с помощью Java

StackOverflow https://stackoverflow.com/questions/1294989

  •  18-09-2019
  •  | 
  •  

Вопрос

Мне нужно сделать файлы и папки скрытыми как в Windows, так и в Linux.Я знаю, что добавление '.' в начало файла или папки сделает их скрытыми в Linux.Как мне сделать файл или папку скрытыми в Windows?

Это было полезно?

Решение

Для Java 6 и ниже,

Вам нужно будет использовать собственный вызов, вот один из способов для Windows

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

Вам следует немного узнать о win32-api или Java Native.

Другие советы

Функциональность, которую вы желаете, является особенностью NIO.2 в предстоящей версии Java 7.

Вот статья, описывающая, как это будет использоваться для того, что вам нужно: Управление метаданными (Атрибутами файлов и хранилищ файлов).Есть пример с Атрибуты файла 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);
}

Настройка атрибутов может быть выполнена с помощью Просмотр атрибута DosFileAttributeView

Учитывая эти факты, я сомневаюсь, что существует стандартный и элегантный способ добиться этого в Java 6 или Java 5.

Java 7 может скрыть файл DOS таким образом:

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-ы не могут.

Приведенный выше код не будет генерировать исключение в файловых системах, отличных от DOS.Если имя файла начинается с точки, то оно также будет скрыто в файловых системах UNIX.

это то, что я использую:

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

в Windows, используя java nio, Файлы

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

Вот полностью компилируемый пример кода Java 7, который скрывает произвольный файл в 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());

    }
 } 

Чтобы проверить, скрыт ли файл.Щелкните правой кнопкой мыши на рассматриваемом файле, и вы увидите после исполнения решения суда, что рассматриваемый файл действительно скрыт.

enter image description here

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

Используйте этот код, это может решить вашу проблему

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top