2013-03-20 2 views
0

Есть ли способ создать файл в java, который нельзя удалить. У меня есть googled и нашел процессы, связанные с cmd. Однако мне нужен чистый «java» способ, который можно сделать на любой платформе.Java Create Undeletable File

Заранее спасибо.

+7

вы можете объяснить, что вы имеете в виду под «неудаляемостью»? С соответствующими правами большинство ОС позволяют вам удалять любые файлы ... – assylias

+0

Увидев, что вы говорите о cmd, вы имеете в виду: http://fixitwizkid.com/threads/make-an-undeletable-file.1445/ As undeletable file? –

+1

Это любая помощь? http://stackoverflow.com/questions/664432/how-do-i-programmatically-change-file-permissions –

ответ

-1

Вы можете заблокировать файл, используя java.nio.*. Вот учебник, как его использовать. http://www.javabeat.net/2007/10/locking-files-using-java/.

+0

Блокировка файлов - это совсем другое понятие, полностью исключающее или разрешающее файлы. Это не поможет ответить на исходный вопрос. – mmorrisson

0

Если вы хотите создать файл, который не может быть случайно перезаписаны, а затем посмотреть на различные ответы на этот: How do i programmatically change file permissions?

Если вы хотите создать файл, который в настоящее время программа не может удалить вообще (но привилегированный), возможно, это будет возможно путем правильной установки разрешений в родительском каталоге или, возможно, с помощью умения SELinux Mandatory Access Control.

Если вы хотите создать действительно неуправляемый файл, вам не повезло. Я не знаю какой-либо операционной системы, которая поддерживает создание файлов, которые никогда не могут быть удалены. Это будет «анти-особенность».


Я также согласился бы с комментарием @ Teifi. Создать файл, который никогда не может быть удален на компьютере пользователя, неприемлем ... если не сделано или с авторизацией администраторов системы. Я бы назвал любое программное обеспечение, которое сделало это «вредоносным».

+0

я не намерен использовать его для злонамеренных целей.Я буду хранить хешированный пароль в файле, чтобы злоумышленники не могли изменять или удалять файл. Хотя я опубликовал ответ, это не помогает мне, потому что файл все равно может быть перезаписан так что это довольно бесполезно для хакеров. –

+0

Я понимаю вашу точку зрения. Вы пытаетесь «делать добро». Но вы, очевидно, не понимаете мою ... что заключается в том, что окончательный контроль над машиной не подходит вам, * независимо от ваших мотивов *. –

+0

ОК ... Я уважаю вашу точку зрения. Тогда, пожалуйста, помогите мне? Есть ли какая-либо папка (или «безопасный» раздел реестра) в Windows, где я могу хранить хешированный пароль и быть уверенным, что хакеры не могут его изменить или удалить? Мне действительно не нужно делать файл неуязвимым, скорее я просто хочу безопасное место для хранения паролей. Пожалуйста, не предлагайте базу данных; онлайн-база данных не является опцией, и автономная база данных может быть легко удалена. –

0

Благодарим за помощь. Я, наконец, понял. Я использовал следующий код, чтобы запретить доступ к пользователю

public static void main() throws IOException 
{ 
    Path file = Paths.get("c:/b.txt"); 
    AclFileAttributeView aclAttr = Files.getFileAttributeView(file, AclFileAttributeView.class); 
    //System.out.println(); 

    UserPrincipalLookupService upls = file.getFileSystem().getUserPrincipalLookupService(); 
    UserPrincipal user = upls.lookupPrincipalByName(System.getProperty("user.name")); 
    AclEntry.Builder builder = AclEntry.newBuilder();  
    builder.setPermissions(EnumSet.of(AclEntryPermission.APPEND_DATA, AclEntryPermission.DELETE, AclEntryPermission.DELETE_CHILD, AclEntryPermission.EXECUTE, AclEntryPermission.READ_ACL, AclEntryPermission.READ_ATTRIBUTES, AclEntryPermission.READ_DATA, AclEntryPermission.READ_NAMED_ATTRS, AclEntryPermission.SYNCHRONIZE, AclEntryPermission.WRITE_ACL, AclEntryPermission.WRITE_ATTRIBUTES, AclEntryPermission.WRITE_DATA, AclEntryPermission.WRITE_NAMED_ATTRS, AclEntryPermission.WRITE_OWNER)); 
    builder.setPrincipal(user); 
    builder.setType(AclEntryType.DENY); 
    aclAttr.setAcl(Collections.singletonList(builder.build())); 
} 
+0

Можете ли вы дать мне ACLFileAttributeView и UserPrincipalLookUpService. bcz он не может решить .. спасибо за ваш код .. я хочу его реализовать .. но я не могу .. –