2011-09-25 16 views
5

मैंने एक्लिप्स में जावा प्रोग्राम बनाया है। मैंने विंडोज एक्सपी पर शुरुआत की, लेकिन हाल ही में इसे अपग्रेड किया है।मेरा प्रोग्राम Win7 के तहत बनाई गई फ़ाइलों को क्यों नहीं हटा सकता?

इसकी बचत प्रणाली के हिस्से के रूप में, प्रोग्राम settings_new.sav फ़ाइल को सेटिंग्स लिखता है। यदि यह ठीक हो जाता है, तो यह settings.sav हटा देता है, और पुराने नाम से मेल खाने के लिए नया नाम बदलता है। हालांकि यह WinXP के तहत काम करता था (कम से कम मैंने सोचा था कि यह किया गया है, लेकिन अब मैं जांच नहीं सकता), Win7 के तहत, यह फ़ाइल को हटाने में विफल रहता है, भले ही यह प्रोग्राम बनाया गया था (हालांकि, प्रोग्राम का एक अलग उदाहरण)।

फ़ाइल ग्रहण द्वारा उठाई गई है और इसे बहुत खुशी से हटाया जा सकता है। मैं इसे मैन्युअल रूप से हटा सकता हूं। मैं अपने कंप्यूटर पर व्यवस्थापक हूँ। फ़ोल्डर केवल वर्कस्पेस फ़ोल्डर के अंदर है, और प्रोग्राम फ़ाइलों में नहीं है (हालांकि, मुझे नहीं पता कि अंतिम उपयोगकर्ता इसे इंस्टॉल करेंगे या नहीं)। कार्यक्रम फाइलों को ठीक से बना और संशोधित कर सकता है। यह किसी भी अपवाद को फेंक नहीं रहा है, जिसे मैंने सोचा था कि अगर यह Win7 को अवरुद्ध कर रहा था तो यह होगा।

कोई भी विचार?

उत्तर

9

यह जावा में फ़ाइल-लॉकिंग तंत्र के कारण है। सुनिश्चित करें कि आप उस फ़ाइल पर BufferedReader, BufferedInputStream जैसे बफरिंग स्ट्रीम को बंद कर दें।

+0

यह वास्तव में विंडोज़ में फाइल लॉकिंग तंत्र है। लिनक्स के तहत एक ही कोड शायद ठीक काम करेगा। लेकिन मैं सहमत हूं, आपको फाइल को आसानी से हर जगह काम करने के लिए फ़ाइल को बंद करना चाहिए। –

+0

@ मार्कबॉबिन्सन: दिलचस्प, मुझे लिनक्स में भी अपने स्विंग अनुप्रयोगों का परीक्षण करना चाहिए। ऐसा लगता है कि डेवलपर्स को JVM की बजाय ओएस स्तर पर समस्याओं का अनुमान लगाना चाहिए। – PraveenMax

+1

विंडोज और लिनक्स में अलग-अलग फाइल लॉकिंग सेमेन्टिक्स हैं। लिनक्स आपको बिना किसी फ़ाइल के संपादन के लिए खुले फ़ाइल को हटाने की अनुमति देगा। फिर आप बिना किसी समस्या के एक ही नाम के साथ एक नई फाइल बना सकते हैं। विंडोज़ में, यह आपको किसी फ़ाइल को हटाने से रोक सकता है अगर यह किसी अन्य प्रक्रिया में खुला है। यह विशिष्ट स्थितियां इस बात पर निर्भर करती हैं कि यह कैसे खोला जाता है (विधि/और प्रकार के प्रकार से)। यदि आपके पास और प्रश्न हैं तो मेरा सुझाव है कि आप विंडोज़ लोगों के उद्देश्य से एक नया SO प्रश्न पोस्ट करें :) –

-3

मुझे यह समस्या होती थी, जब आप अपनी फ़ाइल का उपयोग करके कर लेते हैं तो आपको अपनी फ़ाइल को शून्य के बराबर सेट करना होगा। तो अगर आप की तरह कुछ कार्य करें: यदि आप शून्य करने के लिए फ़ाइल स्थापित करने के लिए जब आप इसका उपयोग इतना है कि प्रणाली है कि फ़ाइल का उपयोग बंद हो जाता है किया जाता है

public void createFile(String path) 
{ 
    File file = new File(path); 
    file.createNewFile(); 
    file = null 
} 

। आपको FileReader और FileWriter के साथ एक ही चीज़ करना है। फ़ाइल को फिर से एक्सेस करने के लिए आपको अपने फ़ाइल पाठकों और अपने फ़ाइल लेखकों को शून्य पर सेट करना होगा। इसे आज़माएं और मुझे बताएं कि यह कैसा चल रहा है।

+2

यह काम नहीं करेगा। जो कुछ भी करेगा वह जावा कचरा कलेक्टर को बाद में लेने की अनुमति देगा। बाद में अपरिभाषित किया जा रहा है। कचरा कलेक्टर को प्राप्त करने के लिए आपको स्पष्ट रूप से फ़ाइल तक पहुंच बंद करनी चाहिए। –

+0

जो कि इसे शून्य करने के लिए सेट करता है, जब आप स्वचालित रूप से कचरा इकट्ठा करने के लिए कुछ सेट करते हैं तो कचरा इकट्ठा होता है। – gsfd

+2

इसका मतलब है कि यह संग्रह के लिए उपलब्ध है, न कि संग्रह तुरंत होता है। यह हो सकता है, लेकिन यह बहुत JVM विशिष्ट व्यवहार है। –

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