2012-06-15 12 views
5

मुझे जावा में सौरइस 10 ओएस में फ़ाइल से हार्ड लिंक गिनती प्राप्त करने के लिए कुछ चाहिए।जावा में हार्ड लिंक गणना प्राप्त करें

पार्सिंग ls -l एक विकल्प नहीं है।

मैंने जावा http://bmsi.com/java/posix/index.html के लिए पॉज़िक्स का उपयोग करने की कोशिश की लेकिन इसे काम करने के लिए प्रबंधित नहीं किया जा सका।

क्या यह जानकारी प्राप्त करने के लिए कोई अन्य हल्के एपीआई या कोड है?

+0

"ls -l | wc -l" काम नहीं करता है? – alfasin

+0

@alfasin: _parsing 'ls' का छोटा विकल्प विकल्प नहीं है? –

+0

@ के-बलो माफ करना - मुझे आपका प्रश्न नहीं मिला। – alfasin

उत्तर

8

जावा 7 में आप इसे का उपयोग java.nio.file.Files.getAttribute(path, "unix:nlink") के साथ प्राप्त करने के लिए कर सकते हैं।

"यूनिक्स" विशेषता दृश्य वास्तव में मानक API के हिस्से के रूप में परिभाषित नहीं किया गया है (और "पॉज़िक्स" दृश्य आपको nlink नहीं देता है), लेकिन मानक ओरेकल/ओपनजेडीके कार्यान्वयन में उपलब्ध है। दूसरी तरफ बनाने का लिंक अब Files पर मानक createLink विधि के साथ उपलब्ध है। जाओ पता लगाओ।

+0

बहुत बढ़िया ... बहुत बुरा हमारे पास अभी हमारे मानक के रूप में 6 है। :( – DRTauli

+0

तो आप अपग्रेड के लिए बेहतर योजना बनाते हैं, क्योंकि [जावा 6 5 महीने (नवंबर 2012) में जीवन से बाहर होगा] (http://www.oracle.com/technetwork/java/eol-135779.html)। – Tometzky

2

सी में using JNI और stat/lstat की कमी केवल एक चीज ls पार्स करने की तुलना में बेहतर चलाने के लिए होगा:

stat --format=%h filename 

जो सिर्फ एक संख्या आउटपुट और पार्स करने के लिए आसान है।

लेकिन यह सभी जटिल हो जाते हैं जब फ़ाइल नामों में गैर-असीसी वर्ण हो सकते हैं। आपको फ़ाइल नाम को देशी एन्कोडिंग में कनवर्ट करना होगा, और कभी-कभी फ़ाइल नाम में अनुमत सभी पात्रों को परिवर्तित नहीं किया जा सकता है (यदि मूल एन्कोडिंग किसी प्रकार का यूनिकोड नहीं है)।

+0

कूल यह काम करता है। धन्यवाद! लेकिन जिन सर्वरों का मैंने परीक्षण किया है उनमें से एक में स्टेट नहीं है ... क्या कोई अन्य समाधान है जिसके लिए इंस्टॉलेशन या कुछ की आवश्यकता नहीं है ... अग्रिम धन्यवाद। :) – DRTauli

+0

एक लिनक्स केवल आवेदन है? – DRTauli

0

इसके लिए jnr-posixस्टेटमेंट (2) के कार्यान्वयन को भी लागू करने पर विचार करें।