सबसे पहले, जावा विश्वास स्थानीय फ़ाइलों और untrust दूरस्थ फ़ाइलें डिफ़ॉल्ट रूप से और डिजाइन द्वारा । तो परीक्षण करते समय, इस बात से अवगत रहें कि आप घर पर अपने कंप्यूटर में क्या कर सकते हैं, आपकी कंपनी के सर्वर के कुछ रिमोट ड्राइव में असंभव हो सकता है।
दूसरा, जब हम दूरस्थ ड्राइव पर फाइल अनुमति की जाँच करें, यह आम तौर पर नहीं पर्याप्त बस Windows Explorer में स्थापित है (संपत्ति ... - पढ़ें केवल/छिपाएं/आर्काइव, आदि) । उदाहरण के लिए, मेरे संगठन में स्थानीय और दूरस्थ दोनों फ़ाइल अनुमतियों को नियंत्रित करने के लिए अन्य मेचिनिज़्म हैं, और यहां तक कि मेरे पीसी के प्रशासक भी सबकुछ गारंटी नहीं दे सकते हैं। भले ही मैन्युअल रूप से/प्रोग्रामेटिक रूप से आप किसी फ़ाइल की अनुमति बदल सकते हैं, अगर कुछ अन्य एप्लिकेशन/समूह नीति/आदि आपको ऐसा करने से मना कर देती हैं, तो परिवर्तन विफल हो सकता है। (उदाहरण के लिए, setReadable()
false
देता है, यह सुझाव देता है कि यह संभव नहीं है) उदाहरण के लिए, मैं दूरस्थ निर्देशिका में execute
txt
फ़ाइल को खोल सकता हूं, जिसका अर्थ है, लेकिन उसी निर्देशिका में bat
फ़ाइल निष्पादन योग्य नहीं है, असल में, मेरे मामले में, जब मैं bat
फ़ाइल बनाना चाहता हूं तो मुझे अपने व्यवस्थापक से अधिक अधिकार प्राप्त करने के लिए कहा जाना चाहिए। मुझे लगता है कि यह हो सकता है कि bat
एक्सटेंशन वर्जित है। चूंकि विंडोज़ में कुछ उपयोगकर्ता समूह में उपयोगकर्ता के रूप में, आपके द्वारा चलाए जाने वाले आपके एक्शन और जेवीएम जेवीएम की तुलना में उच्च नियमों द्वारा सीमित हैं। अगर मैं ग़लत हूं तो मेरी गलती सुझाएं।
हालांकि, अगर आप किसी फ़ाइल की अनुमति सेट नहीं कर पाएंगे, तो अब आप उन्हें जावा 7 में सही ढंग से पढ़ सकते हैं। स्पष्ट रूप से बग रिपोर्ट के बाद, जावा लोगों ने इसे सबसे अधिक ठीक करने के लिए कुछ किया था।मैं jdk 1.7.0_19
उपयोग कर रहा हूँ, और परीक्षण करने के लिए, मैं निम्नलिखित किया है:
Read Only
और Hidden
करने के लिए, एक दूरस्थ फ़ाइल की संपत्ति सेट Windows Explorer में।
जावा से इसे नीचे कोड के साथ पढ़ें (स्टीफन सी के लिंक से और setXxxxx()
विधियों को देखने के लिए संशोधित किया जा सकता है)।
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class FilePermissionTester {
public static void main(String[] args) throws IOException {
File file = new File("Y:\\some\\remote\\drive\\directoy\\xxxxx.txt");
System.out.println("exists:" + file.exists());
System.out.println("is file:" + file.isFile());
System.out.println("can read:" + file.canRead());
System.out.println("can execute:" + file.canExecute());
System.out.println("can write:" + file.canWrite());
System.out.println("is hidden:" + file.isHidden());
System.out.println("change it to be unreadable, and it works? " + file.setReadable(false));
System.out.println("can read:" + file.canRead());
System.out.println("change it to be writable, and it works? " + file.setWritable(true));
System.out.println("can write:" + file.canWrite());
FileInputStream fileInputStream = new FileInputStream(file);
fileInputStream.read();
fileInputStream.close();
}
}
मुझे मिल गया:
exists:true
is file:true
can read:true
can execute:true
can write:false
is hidden:true
change it to be unreadable, and it works? false
can read:true
change it to be writable, and it works? true
can write:true
और अब मैं इस फ़ाइल को पढ़ सकता है, इसे संपादित और उसे सहेजें। अनुमति बदलने से पहले मुझे से बचाने के लिए कहा गया था .. सहेजते समय।
ध्यान दें कि फ़ाइल पठनीय है, और setReadable(false)
false
देता है, और फ़ाइल अभी भी पठनीय है। जावाडोक कहते हैं here कि setReadable()
वापसी false
जब उपयोगकर्ता को एक्सेस प्रीमिशन बदलने की अनुमति नहीं है, या readable
पहले से ही false
है, और अंतर्निहित सिस्टम के लिए कार्यान्वयन नहीं है। जावा एपीआई में डिबगिंग ज्यादा जानकारी प्रदान नहीं करता है, क्योंकि कार्यान्वयन native
चिह्नित है और अधिक नहीं देख सकता है। लेकिन मुझे जवाबदेही बदलने की अनुमति है, इसलिए ऐसा कुछ है जिसे मैं समझ नहीं पा रहा हूं।
लेकिन यह भी ध्यान रखें वहाँ अधिक विशेषताओं की तरह
java.util.File
द्वारा समर्थित नहीं हैं, देखते हैं कि। शायद आप java.security
में अन्य pacakges की जांच कर सकते हैं, जैसे AccessController?
यह विंडोज 7 पर "काम नहीं करता" कैसे है? –
क्या * ठीक * काम नहीं करता है? –
बताएं कि आप उपरोक्त कोड को चलाने पर फ़ाइल अनुमतियों के लिए कौन सा आउटपुट प्राप्त करते हैं। इसके बिना कुछ भी कर सकते हैं। – MozenRath