2013-01-12 94 views
9

मेरे पास एक फ़ाइल है जिसमें से मैंने प्रत्येक अनुमति को दबा दिया है। कोई भी फ़ाइल को पढ़ने में सक्षम नहीं होना चाहिए, है ना? वास्तव में, यदि मैंजावा - file.length() फ़ाइल को पठनीय नहीं होने पर भी लौटाता है

File f = new File("not_readable.pdf"); 
System.out.println(f.canRead()) 

चलाने मैं

false 

मिल हालांकि, अगर मैं

File f = new File("not_readable.pdf"); 
System.out.println(f.length()) 

फोन मैं

455074 

प्राप्त यह मेरी समझ है कि आदेश में किसी फ़ाइल का आकार प्राप्त करने के लिए उसे खोलना और पढ़ना चाहिए ई फाइल पहले, लेकिन यह परिणाम दृढ़ता से सुझाव देता है कि मैं गलत हूं। क्या किसी को पता है यह क्यों होता है? साथ ही, क्या फ़ाइल की आकार तक पहुंचने से जावा की फ़ाइल। लम्बाई() विधि को रोकने का कोई तरीका है?

मैं उबंटू 12.10

+0

क्या ext * फाइल सिस्टम आकार को बचाता है? इसे आज़माएं: 'cat/dev/urandom> फ़ाइल; chmod 000 फ़ाइल; ls -sh फ़ाइल; 'मैं गलत हो सकता हूं, लेकिन मुझे पूरा यकीन है कि अनुमतियां शून्य हैं, भले ही अनुमति शून्य हो। – BenjiWiebe

+6

लंबाई प्राप्त करने के लिए फ़ाइल को क्यों खोलना चाहिए? यह फ़ाइल सिस्टम में निर्देशिका जानकारी में संग्रहीत किया जाएगा। – OldProgrammer

उत्तर

16

उपयोग कर रहा हूँ आप गलत कर रहे हैं: एक फ़ाइल की लंबाई फ़ाइल सिस्टम मेटाडाटा (कम से कम लिनक्स वीएफएस के तहत चल फाइल सिस्टम के लिए) है। कोई भी जिसने निर्देशिका में अनुमतियां पढ़ी हैं, सभी निहित फाइलें और उनके आकार देख सकते हैं। उपयोगकर्ताओं को फ़ाइल के आकार को देखने से रोकने के लिए, आपको उन्हें पूरी तरह से देखने से रोकना होगा, यानी फ़ाइल को उस निर्देशिका में रखें जहां drwxr-x--- जैसी अनुमतियां हैं यदि उपयोगकर्ता निर्देशिका से जुड़े समूह में नहीं है, या drwx------ यदि उपयोगकर्ता है उस समूह में।

2

मुझे नहीं लगता कि आपको फ़ाइल के आकार को देखने के लिए पढ़ने की आवश्यकता क्यों होगी। लिनक्स में, ls निर्देशिका में सभी फ़ाइलों की सामग्री प्रदर्शित करेगा (उनके आकार सहित), भले ही आपके पास उनके पास कोई अनुमति न हो, तब तक जब तक आपके पास फ़ाइल में निर्देशिका में उचित अनुमतियां हों। फ़ाइल का आकार फ़ाइल आवंटन तालिका की एक संपत्ति है, न कि फ़ाइल स्वयं, इसलिए length() को वास्तविक फ़ाइल का निरीक्षण करने की आवश्यकता नहीं है (और यह बाइट्स की संख्या की गणना करके लंबाई प्राप्त करने के लिए बहुत अक्षम होगा फ़ाइल)।