मैं एक साधारण समस्या है में फ़ाइलें ढूंढने: मैं इस तरह एक बड़ा और गहरा नेस्टेड निर्देशिका Files.walkFileTree
का उपयोग कर संरचना पुनरावृति:कुशलतापूर्वक विशिष्ट निर्देशिका
final int CUTOFF = 5;
final List<Path> foundList = new ArrayList<>();
Files.walkFileTree(codeRoot, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
throws IOException {
String rPath = codeRoot.relativize(dir).toString();
int level = rPath.length() - rPath.replace("/", "").length();
if (dir.getFileName().toString().equals("target") || level < CUTOFF) {
return FileVisitResult.CONTINUE;
}
return FileVisitResult.SKIP_SUBTREE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
throws IOException {
if (file.getFileName().toString().endsWith(".txt")) {
foundList.add(file);
}
return FileVisitResult.CONTINUE;
}
});
मेरा लक्ष्य एक विशिष्ट निर्देशिका target
के तहत सभी फ़ाइलों को जोड़ने के लिए है कि मैं codeRoot
के तहत सबसे अधिक CUTOFF
स्तरों पर पता है।
मैं आवश्यक stat()
कॉल या किसी को "नहीं किया जा सकता" के संदर्भ में ऐसा करने के लिए एक और अधिक प्रभावी तरीका ढूंढ रहा हूं।
भाषा स्तर जावा 8 है।
आपको ऐसा क्यों लगता है कि यह किया जा सकता है? walkFileTree एनआईओ का उपयोग करता है जिसका अर्थ है कि यह प्रदर्शन के संदर्भ में देशी चलने के रूप में उतना ही अच्छा है। यदि आप इसे अक्सर आमंत्रित करते हैं, तो आप कुछ कैश का उपयोग कर सकते हैं। कैश का एक उदाहरण: निर्देशिका के अंतिम संशोधित समय (कुछ फाइल सिस्टम में) निर्देशिका को कैश करने के लिए जो अंतिम कॉल के बाद से नहीं बदला है। –
@MladenAdamovic मैं मुख्य रूप से सोच रहा था कि मुझे कुछ एल्गोरिदमिक शॉर्ट-कट याद आ रही है, क्योंकि मेरा कार्यान्वयन उतना ही बेवकूफ़ है जितना इसे प्राप्त होता है। इसके अलावा, मेरे पास कोई सुराग नहीं है यदि 'relativize()' का प्रदर्शन एफएस प्रदर्शन पर असर पड़ता है जिसे मैं टाल सकता हूं। बार-बार चलाने के अनुकूलन के बारे में आपका विचार एक अच्छा है, धन्यवाद! – mabi
आप अपनी गति के उपाय के रूप में क्या उपयोग कर रहे हैं? क्या आपने संदर्भ बिंदु के रूप में सी/सी ++ में एक समान समाधान लागू किया है? आपको ऐसा क्यों लगता है कि यह अब तक अक्षम है? – Fallso