2010-03-18 8 views
8

मैं निम्नलिखित फ़ाइल वस्तु प्रतीकात्मक लिंक के माध्यम से एक निर्देशिका की ओर इशारा करते,listFiles() प्रतीकात्मक लिंक पर काम नहीं कर रही है?

File directory = new File("/path/symlink/foo/bar"); 
String[] files = directory.listFiles(); 

listFiles() अशक्त देता है, इस सिमलिंक की वजह से है है? यदि हां, तो मैं इस बारे में कैसे जाउंगा यदि मैं वास्तव में एक सिम्लिंक युक्त पथ का उपयोग करके बार में फ़ाइलों को सूचीबद्ध करना चाहता हूं?

उत्तर

14

जबकि इस पेचीदा व्यवहार Googling मैं क्या देखा है के अनुसार, जावा की आवश्यकता है कि आप एक File जिसका मार्ग एक लिंक होता है पर .getCanonicalFile() फोन से पहले आप अन्य फ़ाइल कार्यों में उपयोग कर सकते हैं ।

तो:

File directory = new File("/path/symlink/foo/bar").getCanonicalFile(); 
String[] files = directory.listFiles(); 
2

आप पढ़ सकता है प्रतीकात्मक LINK

+0

जो केवल (बीटा) जावा 7 में काम करता है। – Powerlord

0

..extending क्या सुझाव दिया @mickthompson, NIO File library (> जावा 7) का उपयोग कर आप कर सकते हैं:

Path link = Paths.get("/path/symlink/foo/bar"); 
if (Files.isSymbolicLink(link)) { 
    link = Files.readSymbolicLink(link); 
} 

Path[] files = Files.list(link).toArray(size -> new Path[size]); 

Path आसानी से File में बदल जाती है तो सभी आपका पुराना जावा आईओ कोड सुरक्षित रूप से रखा जा सकता है, @seePath#toFile()

0

यह 3.0.1 रिलीज के लिए तय है। इसके रिलीज होने के बाद, इसे आज़माएं और हमें बताएं कि क्या यह अभी भी एक नई बग खोलकर आपके लिए एक समस्या है, संदर्भ के लिए this one पर वापस लिंक करें।