2010-05-20 2 views
3

У меня есть файл, который пользователь загружает, а затем я выполнить команду в Java, чтобы скрыть файл:Изменить скрытый файл в Java

Runtime.getRuntime().exec("attrib +H myFile.txt"); 

Теперь позже мне нужно получить доступ к этому скрытому файлу, но я получаю

java.io.FileNotFoundException: myFile.txt (Access is denied) 

Это работает, если файл не скрыт, но файл необходимо скрыть, чтобы пользователь не изменял его. Итак, как я могу изменить скрытый файл? Есть ли способ сделать это на Java?

Спасибо за ваши идеи.

+0

Не проблема спрятать файл, проблема в том, что у вас нет разрешения на изменение атрибутов файла. Вам нужно запустить cmd в качестве администратора, после чего выполните команду. Вы можете использовать следующий код 'Process p = Runtime.getRuntime(). Exec (" cmd/c start runas/user: domain \\ administrator /savecred:try.txt cmd ");' –

ответ

3

Unhide файл первый:

Runtime.getRuntime().exec("attrib -H myFile.txt"); 
           ^
+1

Это не лучший из всех параметров но, вероятно, единственным обходным решением, так как это похоже на ошибку в JVM. ** скрытый ≠ только для чтения ** и обработка скрытых файлов, как только чтение, просто неправильно. – Martin

5

Я согласен с Дольфом, но вы могли бы также рассмотреть альтернативы использования скрытых файлов. Во-первых, вы теперь зависите от команды «attrib» (Windows). Во-вторых, только потому, что файл помечен как скрытый, это не означает, что пользователь не может его увидеть или изменить (у меня на компьютере установлен всегда отображаемый скрытый файл). В качестве альтернативы вы можете рассмотреть возможность использования стандартных расположений каталога и соглашений об именах файлов. Например, в Windows стандартное расположение для размещения данных вашего приложения находится в папке «Данные приложения». Вы можете найти эту папку, используя свойство системы «user.home»:

System.out.println(System.getProperty("user.home")); 
//prints out something like C:\Documents And Settings\smithj 

Вы можете использовать это создать свою собственную папку Data Application:

//For Windows 
File appDataDir = new File(System.getProperty("user.home"), "Application Data\\MyWidgetData"); 

Аналогично в * NIX среды приложения обычно сохраняют данные в .xyz директории в домашней директории:

//*nix OSes 
System.out.println(System.getProperty("user.home")); 
//prints out something like /user/home/smithj 
File appDataDir = new File(System.getProperty("user.home"), ".MyWidgetData"); 

вы можете посмотреть на собственность os.name, чтобы определить, в какой среде вы работаете на и построить правильный путь ба sed на этом.

+0

Хорошо спасибо за ваши ответы. – Marquinio

Смежные вопросы