2013-06-25 3 views
0

Я делаю службу, которая следит за изменениями файла, используя стабильную RecursiveFileObserver, этому наблюдателю файла присваивается наблюдение за файлом. Модификации (FileObserver.MODIFY) ... Что я хочу этого наблюдателя сделать onEvent - изменить значение файла до того, что было до его изменения. Итак, цикл:Чтение/получение показаний файла до его изменения

Начало обслуживания и запуск наблюдателяWatching -> Файл изменен X -> My Observer изменяет это на все он был до того, как был изменен на X ...

Итак, все, что мне нужно, - это способ прочитать значение файла перед его заменой на X.

Так может кто-нибудь мне помочь в этом, и возможно ли это?

Это фрагмент того, что я пытаюсь сделать ...

@Override 
    public void onEvent(int event, String path) { 
     // TODO Auto-generated method stub 
     super.onEvent(event, path); 

     if(event != MODIFY){ 
      return; 
     } 

     if (CoresManagement.isAccessAllowed()){ //If the access is allowed , doesn't do anything ...   
      return; 
     } 

     //Here is where I want to do what I said above 

      if (path == "le Wild Location"){ 
       modifyFile("le Wild Location" , "Here is the value I want to know , the old value "); 
      } 

пожалуйста, если вы найдете что-нибудь неясное я могу уточнить!

ответ

0

, что вы можете сделать это, чтобы в FileObserver реализация про

fileObserver = новый FileObserver (pathOfFile) {

@Override 
public void onEvent(int event, String file) { 
    // on any change in the file you can replace the old file. 
    //basically keep the backup file some where or in the buffer and replace with this file if there is any change. 
} 
}; 
fileObserver.startWatching(); 

заменить файл.

FileChannel origFile = null; 
FileChannel modFile = null; 
long cnt = 0; 
long size = 0; 

try { 
    origFile = new FileInputStream(sourceFile).getChannel(); 
    modFile = new FileOutputStream(destFile).getChannel(); 

    size = origFile.size();    
    while((cnt += modFile.transferFrom(origFile, cnt, size-cnt))<size); 
} 
finally { 
    if(origFile != null) { 
     origFile.close(); 
    } 
    if(modFile != null) { 
     modFile.close(); 
    } 
} 
+0

Это то, что я делаю, но цель этого заключается в том, что я хочу, чтобы мое приложение меняло этот файл, а другие, включая систему, меняли его ... И эта процедура предназначена для части ограничения процесс, из-за которого вы видите 'if (CoresManagement.isAccessAllowed()'), доступ разрешен после того, как мое приложение попытается изменить файл, после его завершения оно не разрешает ... и, по моему мнению, запретить, я имею в виду чтобы изменить файл до того, что он был до того, как кто-либо будет изменен, и для этого мне нужно как-то заново прочитать файл перед его изменением. – Seaskyways

+0

Можете ли вы создать частный файл? вы можете использовать метод openFileOutput ("filename", MODE_PRIVATE) – blganesh101

+0

файл, который я изменяю, находится в каталоге/sys, и только корень и система могут его изменить, поэтому для изменения файла я использую классические команды оболочки (su, echo, cat ....) ... Так что no – Seaskyways

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

  • Нет связанных вопросов^_^