2012-06-24 16 views
5

मैं जावा में एक प्रोग्राम बना रहा हूं जो निर्देशिका को मॉनीटर और बैकअप लेता है। समय-समय पर मुझे संशोधित फ़ाइलों को रिपोजिटरी में अपलोड करना होगा या डाउनलोड करना होगा यदि इसका कोई नया संस्करण है। ऐसा करने के लिए मुझे फ़ाइल को लॉक करना होगा ताकि उपयोगकर्ता सामग्री को बदलने या इसे हटाने में असमर्थ हो। वर्तमान में मैं फ़ाइल लॉक करने के लिए इस कोड का उपयोग कर रहा हूँ:फ़ाइल लॉकिंग और हटाएं

 file = new RandomAccessFile("C:\\Temp\\report.txt", "rw"); 

     FileChannel fileChannel = file.getChannel(); 
     fileLock = fileChannel.tryLock(); 
     if (fileLock != null) { 
      System.out.println("File is locked"); 

      try{ 

      //Do what i need  

      }catch (Exception e){//Catch exception if any 
       System.err.println("Error: " + e.getMessage()); 
      } 
     } 
     else{ 
      System.out.println("Failed"); 
     } 
    } catch (FileNotFoundException e) { 
     System.out.println("Failed"); 
    }finally{ 
     if (fileLock != null){ 
      fileLock.release(); 
     } 

लेकिन अगर मैं पुराने फ़ाइल को हटाने और नए के साथ बदलने के लिए एक नया संस्करण है वहाँ। लेकिन फ़ाइल लॉक मुझे फ़ाइल को हटाने की अनुमति नहीं देता है।

क्या मुझे अनलॉक करना चाहिए और इसे हटा देना चाहिए, भरोसा है कि उपयोगकर्ता फ़ाइल में लिख नहीं पाएगा? या ऐसा करने का कोई और तरीका है?

+1

यह वैसे भी काम नहीं करेगा। FileLocks उपयोगकर्ता को फ़ाइल को बदलने या हटाने से नहीं रोकता है। वे केवल अन्य प्रोग्राम को फ़ाइल लॉक करने से रोकते हैं। – EJP

उत्तर

3

आप फ़ाइल काट-छांट कर सकते हैं:

fileChannel.truncate(0); 

और बाद में इस पर नए संस्करण लिखते हैं, इस समय अंतराल जिसमें उपयोगकर्ता फिर फ़ाइल बना सकते हैं नहीं बनाता।

प्रलेखन से

:

दिए गए आकार फ़ाइल के वर्तमान आकार फिर फ़ाइल छोटा किया गया है, फ़ाइल के नए अंत से परे किसी भी बाइट्स की निकालने की तुलना में कम है। यदि दिया गया आकार फ़ाइल के वर्तमान आकार से अधिक या उसके बराबर है तो फ़ाइल संशोधित नहीं है। किसी भी मामले में, यदि इस चैनल की फ़ाइल स्थिति दिए गए आकार से अधिक है तो यह उस आकार पर सेट है।

http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html#truncate%28long%29

+0

जब तक कि मैं बड़ी तस्वीर नहीं खो रहा हूं, जो केवल फ़ाइल की सामग्री को मिटा देता है। तो यह वही नहीं है जो मुझे चाहिए। – user1308768

+0

* क्या मुझे अनलॉक करना चाहिए और इसे हटा देना चाहिए, भरोसा है कि उपयोगकर्ता फ़ाइल में लिख नहीं पाएगा? या क्या ऐसा करने का कोई और तरीका है? * मैंने * truncate * के साथ उत्तर दिया है कि सामग्री को साफ़ करने के लिए फ़ाइल लॉक होने के बाद आप इसका उपयोग कर सकते हैं और उस पर नई सामग्री लिख सकते हैं, इसलिए आपके पास हटाने के बीच का समय अंतर नहीं है फ़ाइल को सिंक करने के लिए फ़ाइल के आधार पर नया बनाएं और बनाएं। –

+0

मैं बस कुछ अतिरिक्त स्पष्टीकरण जोड़ता हूं ... अगर आपको और स्पष्टीकरण की आवश्यकता है तो कृपया मुझे बताएं। –

संबंधित मुद्दे