Сделайте Файл/Папку Скрытым в Windows с Java

Часто забываемый: двоеточие (:) не хорошая идея, так как это является наиболее часто используемым в материале как $PATH, т.е. списке каталогов, где исполняемые файлы найдены "автоматически". Это может вызвать беспорядок с именами каталогов DOS/Windows, где, конечно, двоеточие используется в именах дисковода.

23
задан Nathan 20 January 2016 в 17:28
поделиться

4 ответа

Для Java 6 и ниже,

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

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

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

22
ответ дан 29 November 2019 в 01:01
поделиться

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

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.
}
3
ответ дан 29 November 2019 в 01:01
поделиться

Желаемая функциональность - это функция 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.

22
ответ дан 29 November 2019 в 01:01
поделиться

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.

15
ответ дан 29 November 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: