Я не думаю, что вам повезет с методом File.isSystemFolder
, потому что я не могу себе представить, что было бы легко навязать определение "системная папка", которое является достаточно широким для JVM в различных операционных областях.системы, чтобы быть в состоянии реализовать правильно и с пользой.Как предлагает Балус, проверка на наличие скрытых папок является хорошим началом и вполне может быть достаточной сама по себе (поскольку это копирует то, что они увидят в оболочке проводника).
Сначала о «виртуальных» папкахВы уверены, что они виртуальные?Разве C:\Documents and Settings
(или позже C:\Users
) не является реальным каноническим путем для этой папки?Если это не так, то вы могли бы легко отсеять их на окнах, увидев getCanonicalPath().equals(getAbsolutePath())
(если вы готовы к нескольким ложным срабатываниям с лишними .
с и ..
с).
Если это не работает, то это просто обычная папка - вам нужно подумать о том, какие логические свойства у этих папок, которые делают их «виртуальными».Или, другими словами, придумайте некоторый предикат, который можно выразить в терминах методов на File
, который захватывает то, что вы хотите отфильтровать.Даже я не уверен прямо сейчас, что бы и не подходило, основываясь на вашем английском описании.