मेरे पास एक ऐसी प्रक्रिया है जिसे क्रॉन से अक्सर उस फ़ाइल को पढ़ने के लिए कहा जाएगा जिसमें कुछ चाल संबंधित कमांड हैं। मेरी प्रक्रिया को इस डेटा फ़ाइल को पढ़ने और लिखने की आवश्यकता है - और इस प्रक्रिया के दौरान अन्य प्रक्रियाओं को छूने से रोकने के लिए इसे लॉक रखें। उपयोगकर्ता द्वारा (संभावित) लिखने/उसी डेटा फ़ाइल में संलग्न करने के लिए एक पूरी तरह से अलग प्रक्रिया निष्पादित की जा सकती है। मैं इन दो प्रक्रियाओं को अच्छा खेलना चाहता हूं और एक ही समय में फ़ाइल को एक्सेस कर सकता हूं।पढ़ने और लिखने के लिए जावा फ़ाइल लॉक
एनओओ फ़ाइल लॉक मुझे जो चाहिए (मेरी खुद की सैमफोर प्रकार फाइलों को लिखने से कम) लग रहा था, लेकिन मुझे पढ़ने के लिए इसे लॉक करने में समस्या हो रही है। मैं बस ठीक से लॉक और लिख सकता हूं, लेकिन जब पढ़ने के दौरान लॉक बनाने का प्रयास करता हूं तो मुझे एक गैर-योग्य ChannelException मिलता है। क्या फ़ाइल पढ़ने के लिए लॉक करना भी संभव है? ऐसा लगता है कि RandomAccessFile की आवश्यकता के करीब है, लेकिन मुझे नहीं लगता कि इसे कैसे कार्यान्वित किया जाए।
FileInputStream fin = new FileInputStream(f);
FileLock fl = fin.getChannel().tryLock();
if(fl != null)
{
System.out.println("Locked File");
BufferedReader in = new BufferedReader(new InputStreamReader(fin));
System.out.println(in.readLine());
...
अपवाद FileLock लाइन पर फेंक दिया जाता है:
यहाँ कोड है कि विफल रहता है।
java.nio.channels.NonWritableChannelException
at sun.nio.ch.FileChannelImpl.tryLock(Unknown Source)
at java.nio.channels.FileChannel.tryLock(Unknown Source)
at Mover.run(Mover.java:74)
at java.lang.Thread.run(Unknown Source)
Javadocs को देखते हुए, यह
अनियंत्रित अपवाद है जब एक प्रयास एक चैनल है कि मूल रूप लेखन के लिए नहीं खोला गया था करने के लिए लिखने के लिए किया जाता है फेंक दिया कहते हैं।
लेकिन मुझे इसे लिखने की आवश्यकता नहीं है। जब मैं लेखन उद्देश्यों के लिए FileOutpuStream आदि बनाने का प्रयास करता हूं, तब तक यह तब तक खुश होता है जब तक कि मैं एक ही फ़ाइल पर FileInputStream खोलने का प्रयास नहीं करता।
क्या आपने तीन पैरा विधि कॉल, फ़ाइल लॉक लॉक (लंबी स्थिति, लंबा आकार, बूलियन साझा) का उपयोग करने का प्रयास किया है? मैंने पहले कभी भी फ़ाइल लॉक का उपयोग नहीं किया है, इसलिए मैं उत्तर के रूप में पोस्ट नहीं करूंगा लेकिन मुझे लगता है कि उस विधि कॉल का उपयोग करने से मदद मिल सकती है क्योंकि ऐसा लगता है कि आपको साझा लॉक की आवश्यकता है और एक विशेष लॉक नहीं है क्योंकि आप फ़ाइल को लिखना चाहते हैं उस पर एक ताला है। – ChadNC
मुझे लगता है कि इसका इरादा केवल फाइल के हिस्सों को लॉक करना है, हालांकि मैं पूरी फाइल को रोकने और संभव भ्रष्टाचार को लॉक करना चाहता हूं। – bobtheowl2