ডিরেক্টরিতে সমস্ত ফাইলের একটি তালিকা পান (পুনরাবৃত্ত)


95

আমি একটি ডিরেক্টরি এবং এর উপ ডিরেক্টরিগুলির ফাইলগুলির তালিকা (মুদ্রণ নয়, এটি সহজ) পেতে চেষ্টা করছি।

আমি চেষ্টা করেছিলাম:

def folder = "C:\\DevEnv\\Projects\\Generic";
def baseDir = new File(folder);
files = baseDir.listFiles();

আমি কেবল ডিরেক্টরিগুলি পাই। আমি চেষ্টা করেছি:

def files = [];

def processFileClosure = {
        println "working on ${it.canonicalPath}: "
        files.add (it.canonicalPath);
    }

baseDir.eachFileRecurse(FileType.FILES, processFileClosure);

তবে "ফাইলগুলি" বন্ধের সুযোগে স্বীকৃত নয়।

আমি কীভাবে তালিকা পেতে পারি?

উত্তর:


215

এই কোডটি আমার পক্ষে কাজ করে:

import groovy.io.FileType

def list = []

def dir = new File("path_to_parent_dir")
dir.eachFileRecurse (FileType.FILES) { file ->
  list << file
}

এরপরে তালিকা ভেরিয়েবল প্রদত্ত ডিরেক্টরি এবং এর উপ-ডিরেক্টরিগুলির সমস্ত ফাইল (java.io.File) ধারণ করে:

list.each {
  println it.path
}

15
ডিফল্টরূপে, গ্রোভি java.io আমদানি করে তবে গ্রোভি.আইও নয় তাই ফাইল টাইপ ব্যবহার করার জন্য আপনাকে অবশ্যই এটি স্পষ্টভাবে আমদানি করতে হবে।
ক্রিস মাউন্টফোর্ড

4
ফাইল টাইপ ব্যবহারের জন্য, আপনি সঠিক গ্রোভি সংস্করণ ব্যবহার করেছেন তা নিশ্চিত করুন: "গ্রোভ.আই. ক্লাস ক্লাস গ্রোভির সংস্করণ 1.7.1 এ চালু হয়েছিল।" দেখুন: স্ট্যাকওভারফ্লো.com
প্রশ্নগুলি

এটি ফোল্ডারের নামগুলি এর পথের সাথে প্রদর্শন করছিল। উদাহরণস্বরূপ: আউটপুটে একা /tmp/directory1কীভাবে পাবেনdirectory1
সাউন্ডরাজনা.২০

weird..this রুট পাথ দেয় এমনকি যদি আমি একটি সঙ্গে এটি ভূমিকা .এটা যায়/./path
light24bulbs

আমি কীভাবে ডিরেক্টরিতে সমস্ত ফোল্ডার তালিকাভুক্ত করতে পারি?
কার্লোস আন্দ্রেস

18

গ্রোভির (1.7.2+) নতুন সংস্করণগুলি কোনও ডিরেক্টরিতে ফাইলগুলি সহজেই অতিক্রম করতে একটি জেডিকে এক্সটেনশন সরবরাহ করে, উদাহরণস্বরূপ:

import static groovy.io.FileType.FILES
def dir = new File(".");
def files = [];
dir.traverse(type: FILES, maxDepth: 0) { files.add(it) };

আরও উদাহরণের জন্য [1] দেখুন।

[1] http://mrhaki.blogspot.nl/2010/04/groovy-goodness-traversing-directory.html


6

নিম্নলিখিতটি build.gradleআমদানি না করেই অ্যান্ড্রয়েড প্রকল্পের জন্য গ্র্যাডল / গ্রোভিতে আমার জন্য কাজ করে groovy.io.FileType(দ্রষ্টব্য: উপ-ডিরেক্টরিগুলি পুনরাবৃত্তি করে না, তবে আমি যখন এই সমাধানটি পেয়েছি তখন আমি পুনরাবৃত্তির বিষয়ে যত্নশীল হব না, সুতরাং আপনিও না পারেন):

FileCollection proGuardFileCollection = files { file('./proguard').listFiles() }
proGuardFileCollection.each {
    println "Proguard file located and processed: " + it
}

4
যদিও এটি সম্ভবত সাব-ডিরেক্টরিতে পুনরাবৃত্তি করে না। তবে: অগ্রগামী ফাইলগুলি আলাদা করার এবং সেগুলি একবারে আমদানি করার জন্য আমার উদ্দেশ্যে কাজ করেছে :)
ChrisPrime

দুর্ভাগ্যক্রমে এটি "ডিরেক্টরিতে সমস্ত ফাইল (পুনরাবৃত্ত)" প্রশ্নের প্রশ্নের উত্তর দেয় না। এটি কেবলমাত্র বর্তমান ডিরেক্টরিটি তালিকাভুক্ত করবে এবং প্রসঙ্গে বিভ্রান্তিকর।
অটাগো

fileTreeপুনরাবৃত্তি।
নোয়েল ইয়াপ

FileTreeডিরেক্টরি অন্তর্ভুক্ত করে না (তাদের ফাইল হিসাবে বিবেচনা করে না)।
DNax

1

এটিই আমি গ্রেড বিল্ড স্ক্রিপ্টের জন্য নিয়ে এসেছি:

task doLast {
    ext.FindFile = { list, curPath ->
        def files = file(curPath).listFiles().sort()

        files.each {  File file ->

            if (file.isFile()) {
                list << file
            }
            else {
                list << file  // If you want the directories in the list

                list = FindFile( list, file.path) 
            }
        }
        return list
    }

    def list = []
    def theFile = FindFile(list, "${project.projectDir}")

    list.each {
        println it.path
    }
}

উপরের আইডিইএ থেকে তালিকাটি ব্যবহার করে নেওয়া হয়েছিল। উপরের স্ক্রিপ্টগুলির সমস্যা হ'ল তাদের গ্রোভ.আই.ই.ফাইল টাইপ.ফায়ালস আমদানি করতে হবে। গ্রেড স্ক্রিপ্টগুলি এটি পছন্দ করে না। সুতরাং আমি কেবল ফাইল খুঁজে পাওয়ার জন্য একটি পদ্ধতি তৈরি করেছি যা ডিরেক্টরি খুঁজে পাওয়া যায় তখন নিজেকে কল করে।
তীমথিয়
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.