[java] जावा से किसी फ़ोल्डर में सभी फ़ाइलों को कैसे पढ़ा जाए?



Answers

File folder = new File("/Users/you/folder/");
File[] listOfFiles = folder.listFiles();

for (File file : listOfFiles) {
    if (file.isFile()) {
        System.out.println(file.getName());
    }
}
Question

जावा के माध्यम से किसी फ़ोल्डर में सभी फ़ाइलों को कैसे पढ़ा जाए?




इस विषय पर सभी उत्तर जो नए जावा 8 कार्यों का उपयोग करते हैं, स्ट्रीम को बंद करने के लिए उपेक्षा कर रहे हैं। स्वीकृत उत्तर में उदाहरण होना चाहिए:

try (Stream<Path> filePathStream=Files.walk(Paths.get("/home/you/Desktop"))) {
    filePathStream.forEach(filePath -> {
        if (Files.isRegularFile(filePath)) {
            System.out.println(filePath);
        }
    });
}

Files.walk विधि के Files.walk :

लौटाई गई धारा एक या अधिक निर्देशिकास्ट्रीम को समाहित करती है। यदि फ़ाइल सिस्टम संसाधनों के समय पर निपटान की आवश्यकता है, तो संसाधनों के संचालन के पूरा होने के बाद स्ट्रीम की करीबी विधि को लागू करने के लिए प्रयास-संसाधनों के निर्माण का उपयोग किया जाना चाहिए।




void getFiles(){
        String dirPath = "E:/folder_name";
        File dir = new File(dirPath);
        String[] files = dir.list();
        if (files.length == 0) {
            System.out.println("The directory is empty");
        } else {
            for (String aFile : files) {
                System.out.println(aFile);
            }
        }
    }



https://.com/a/286001/146745 पर देखे गए java.io.FileFilter का अच्छा उपयोग

File fl = new File(dir);
File[] files = fl.listFiles(new FileFilter() {          
    public boolean accept(File file) {
        return file.isFile();
    }
});



स्वीकार्य उत्तर पर विस्तार करने के लिए मैं फ़ाइल नामों को एक ArrayList में संग्रहीत करता हूं (बस उन्हें System.out.println पर डंप करने के बजाय) मैंने एक सहायक वर्ग "MyFileUtils" बनाया है ताकि इसे अन्य प्रोजेक्ट्स द्वारा आयात किया जा सके:

class MyFileUtils {
    public static void loadFilesForFolder(final File folder, List<String> fileList){
        for (final File fileEntry : folder.listFiles()) {
            if (fileEntry.isDirectory()) {
                loadFilesForFolder(fileEntry, fileList);
            } else {
                fileList.add( fileEntry.getParent() + File.separator + fileEntry.getName() );
            }
        }
    }
}

मैंने फ़ाइल नाम के लिए पूरा पथ जोड़ा। आप इसका इस्तेमाल इस तरह करेंगे:

import MyFileUtils;

List<String> fileList = new ArrayList<String>();
final File folder = new File("/home/you/Desktop");
MyFileUtils.loadFilesForFolder(folder, fileList);

// Dump file list values
for (String fileName : fileList){
    System.out.println(fileName);
}

ArrayList "मान" द्वारा पारित किया जाता है, लेकिन मान का उपयोग JVM हीप में रहने वाले उसी ArrayList ऑब्जेक्ट को इंगित करने के लिए किया जाता है। इस तरह, प्रत्येक रिकर्सन कॉल उसी ऐरेलिस्ट में फ़ाइल नाम जोड़ता है (हम प्रत्येक रिकर्सिव कॉल पर एक नया ऐरेलिस्ट नहीं बना रहे हैं)।




File directory = new File("/user/folder");      
File[] myarray;  
myarray=new File[10];
myarray=directory.listFiles();
for (int j = 0; j < myarray.length; j++)
{
       File path=myarray[j];
       FileReader fr = new FileReader(path);
       BufferedReader br = new BufferedReader(fr);
       String s = "";
       while (br.ready()) {
          s += br.readLine() + "\n";
       }
}



जावा 7 में अब आप इसे इस तरह से कर सकते हैं - http://docs.oracle.com/javase/tutorial/essential/io/dirs.html#listdir

Path dir = ...;
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
    for (Path file: stream) {
        System.out.println(file.getFileName());
    }
} catch (IOException | DirectoryIteratorException x) {
    // IOException can never be thrown by the iteration.
    // In this snippet, it can only be thrown by newDirectoryStream.
    System.err.println(x);
}

आप एक फ़िल्टर भी बना सकते हैं जिसे उपरोक्त newDirectoryStream विधि में पारित किया जा सकता है

DirectoryStream.Filter<Path> filter = new DirectoryStream.Filter<Path>() {
    public boolean accept(Path file) throws IOException {
        try {
            return (Files.isRegularFile(path));
        } catch (IOException x) {
            // Failed to determine if it's a file.
            System.err.println(x);
            return false;
        }
    }
};

अन्य फ़िल्टरिंग उदाहरण - http://docs.oracle.com/javase/tutorial/essential/io/dirs.html#glob




यह दिए गए पथ में निर्दिष्ट फ़ाइल एक्सटेंशन फ़ाइलों को पढ़ेगा (उप फ़ोल्डर भी दिखता है)

public static Map<String,List<File>> getFileNames(String 
dirName,Map<String,List<File>> filesContainer,final String fileExt){
    String dirPath = dirName;
    List<File>files = new ArrayList<>();
    Map<String,List<File>> completeFiles = filesContainer; 
    if(completeFiles == null) {
        completeFiles = new HashMap<>();
    }
    File file = new File(dirName);

    FileFilter fileFilter = new FileFilter() {
        @Override
        public boolean accept(File file) {
            boolean acceptFile = false;
            if(file.isDirectory()) {
                acceptFile = true;
            }else if (file.getName().toLowerCase().endsWith(fileExt))
              {
                acceptFile = true;
              }
            return acceptFile;
        }
    };
    for(File dirfile : file.listFiles(fileFilter)) {
        if(dirfile.isFile() && 
dirfile.getName().toLowerCase().endsWith(fileExt)) {
            files.add(dirfile);
        }else if(dirfile.isDirectory()) {
            if(!files.isEmpty()) {
                completeFiles.put(dirPath, files);  
            }

getFileNames(dirfile.getAbsolutePath(),completeFiles,fileExt);
        }
    }
    if(!files.isEmpty()) {
        completeFiles.put(dirPath, files);  
    }
    return completeFiles;
}



जबकि मैं रिच, ओरियन और बाकी के उपयोग के लिए सहमत हूं:

    final File keysFileFolder = new File(<path>); 
    File[] fileslist = keysFileFolder.listFiles();

    if(fileslist != null)
    {
        //Do your thing here...
    }

किसी कारण से यहां सभी उदाहरण पूर्ण पथ का उपयोग करते हैं (यानी रूट से सभी तरह से, या कहें, विंडोज़ के लिए ड्राइव अक्षर (सी: \) ..)

मैं यह जोड़ना चाहता हूं कि सापेक्ष पथ का उपयोग करना भी संभव है। इसलिए, यदि आप pwd (वर्तमान निर्देशिका / फ़ोल्डर) फ़ोल्डर 1 है और आप फ़ोल्डर 1 / उपफोल्डर को पार्स करना चाहते हैं, तो आप बस लिखते हैं (इसके बजाय उपरोक्त कोड में):

    final File keysFileFolder = new File("subfolder");



private static final String ROOT_FILE_PATH="/";
File f=new File(ROOT_FILE_PATH);
File[] allSubFiles=f.listFiles();
for (File file : allSubFiles) {
    if(file.isDirectory())
    {
        System.out.println(file.getAbsolutePath()+" is directory");
        //Steps for directory
    }
    else
    {
        System.out.println(file.getAbsolutePath()+" is file");
        //steps for files
    }
}



कक्षा पथ के अंदर मौजूद टेस्ट फ़ोल्डर से फ़ाइलों को सूचीबद्ध करें

import java.io.File;
import java.io.IOException;

public class Hello {

    public static void main(final String[] args) throws IOException {

        System.out.println("List down all the files present on the server directory");
        File file1 = new File("/prog/FileTest/src/Test");
        File[] files = file1.listFiles();
        if (null != files) {
            for (int fileIntList = 0; fileIntList < files.length; fileIntList++) {
                String ss = files[fileIntList].toString();
                if (null != ss && ss.length() > 0) {
                    System.out.println("File: " + (fileIntList + 1) + " :" + ss.substring(ss.lastIndexOf("\\") + 1, ss.length()));
                }
            }
        }


    }


}



import java.io.File;


public class Test {

public void test1() {
    System.out.println("TEST 1");
}

public static void main(String[] args) throws SecurityException, ClassNotFoundException{

    File actual = new File("src");
    File list[] = actual.listFiles();
    for(int i=0; i<list.length; i++){
        String substring = list[i].getName().substring(0, list[i].getName().indexOf("."));
        if(list[i].isFile() && list[i].getName().contains(".java")){
                if(Class.forName(substring).getMethods()[0].getName().contains("main")){
                    System.out.println("CLASS NAME "+Class.forName(substring).getName());
                }

         }
    }

}
}

बस अपने फ़ोल्डर को पास करें यह आपको विधि के बारे में मुख्य कक्षा बताएगा।




मुझे लगता है कि फ़ोल्डर और उप फ़ोल्डर में सभी फाइलों को पढ़ने का यह अच्छा तरीका है

private static void addfiles (File input,ArrayList<File> files)
{
    if(input.isDirectory())
    {
        ArrayList <File> path = new ArrayList<File>(Arrays.asList(input.listFiles()));
        for(int i=0 ; i<path.size();++i)
        {
            if(path.get(i).isDirectory())
            {
                addfiles(path.get(i),files);
            }
            if(path.get(i).isFile())
            {
                files.add(path.get(i));
            }
        }
    }
    if(input.isFile())
    {
        files.add(input);
    }
}





Links