Часто забываемый: двоеточие (:) не хорошая идея, так как это является наиболее часто используемым в материале как $PATH, т.е. списке каталогов, где исполняемые файлы найдены "автоматически". Это может вызвать беспорядок с именами каталогов DOS/Windows, где, конечно, двоеточие используется в именах дисковода.
Для Java 6 и ниже,
Вам нужно будет использовать собственный вызов, вот один из способов для Windows
Runtime.getRuntime().exec("attrib +H myHiddenFile.java");
Вы должны немного узнать о win32-api или Java Native.
это то, что я использую:
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.
}
Желаемая функциональность - это функция 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.