জাভা থেকে কোনও ফোল্ডারে সমস্ত ফাইল কীভাবে পড়বেন?


669

জাভা দিয়ে কোনও ফোল্ডারে সমস্ত ফাইল কীভাবে পড়বেন?


8
আমি সম্মত, ক্লাসটি ব্যবহারের জন্য নির্দেশ করুন যাতে পোস্টারটি বিভিন্ন পদ্ধতির সাথে পরিচিত হতে পারে, অন্যথায় পোস্টারগুলি কী কী অন্যান্য পদ্ধতি উপলব্ধ তা খুঁজে পাওয়ার জন্য API টি পড়তে বিরক্ত করে না।
ক্যামিকার

5
আপনি কি কোনও ফোল্ডারের সমস্ত ফাইল বা কোনও ফোল্ডারের সমস্ত ফাইল এবং সমস্ত সাবফোল্ডার বোঝাতে চেয়েছিলেন?
জিম গ্যারিসন

3
এপিআই-তে একটি আপ টু ডেট লিঙ্ক: ডকস.অরাকল.com
টম ডাকারিং

2
আপনি যদি জাভা 7 ব্যবহার করছেন বা আপনি আরও নতুন ব্যবহার করতে পারেন তবে Files.walkFileTreeদেখুন স্ট্যাকওভারফ্লো.com
a/

উত্তর:


977
public void listFilesForFolder(final File folder) {
    for (final File fileEntry : folder.listFiles()) {
        if (fileEntry.isDirectory()) {
            listFilesForFolder(fileEntry);
        } else {
            System.out.println(fileEntry.getName());
        }
    }
}

final File folder = new File("/home/you/Desktop");
listFilesForFolder(folder);

ফাইলসওয়াক এপিআই জাভা 8 থেকে পাওয়া যায়।

try (Stream<Path> paths = Files.walk(Paths.get("/home/you/Desktop"))) {
    paths
        .filter(Files::isRegularFile)
        .forEach(System.out::println);
} 

উদাহরণটি API নির্দেশিকায় প্রস্তাবিত -সহ-সংস্থানগুলি ব্যবহার করে pattern এটি নিশ্চিত করে যে কোনও পরিস্থিতিতে প্রবাহ বন্ধ থাকবে be


10
getName()কেবলমাত্র তার ডিরেক্টরিতে ফাইলটির নাম দেবে যা মূলটির একটি উপ-ডিরেক্টরি হতে পারে। আপনি যদি এই তথ্যগুলি ফাইলগুলি সন্ধানের জন্য ব্যবহার করার পরিকল্পনা করেন তবে আপনি getPath()আরও কার্যকর হতে দেওয়া পথটি পেতে পারেন ।
টিম পেরেন্তি

4
আমার পুরো সিস্টেম জুড়ে পিডিএফ বা এইচটিএমএল বলে একটি নির্দিষ্ট ধরণের সমস্ত ফাইল সন্ধান করতে আমি কি এই পদ্ধতিটি ব্যবহার করতে পারি? আমার উদ্বেগ হ'ল দক্ষতা, হাজার হাজার ফাইল সহ সিস্টেমগুলির জন্য এটি কি যথেষ্ট দ্রুতগতিযুক্ত বা এর চেয়ে ভাল বিকল্প আছে?
নিতিন লেবিশেটি

@ কোডেলন জাভা 8-এর হিসাবে, পারফরম্যান্সটি খুব গ্রহণযোগ্য, আপনি এটি সম্পর্কে পিছিয়ে কিছু দেখেন না। আপনার কাজটি সম্পন্ন করার জন্য এটি দ্রুত, দক্ষ এবং যথেষ্ট পাঠযোগ্য।
tom_mai78101

17
জাভা 8 এ আপনি এই filterপদ্ধতিটি ব্যবহার করতে পারেন । তারপরে forEach এর আর দরকার নেই। এখানে দেখুন -> stackoverflow.com/a/26215931/1029251
জুলিয়ান Pieles

3
কেবলমাত্র এটি একবারে আরম্ভ করা হয়েছে তা নির্দেশ করতে।
সমৃদ্ধ

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

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

2
আমি মনে করি এটি ডিরেক্টরি নামগুলি এবং কোনও ফাইলের নাম মুদ্রণ করবে না
10

1
স্বীকৃত উত্তরের চেয়ে বোঝা সহজ। +1 টি।
sam1370

129

জাভা 8 এ আপনি এটি করতে পারেন

Files.walk(Paths.get("/path/to/folder"))
     .filter(Files::isRegularFile)
     .forEach(System.out::println);

যা সমস্ত ডিরেক্টরি বাদ দিয়ে ফোল্ডারে সমস্ত ফাইল মুদ্রণ করবে। আপনার যদি একটি তালিকার প্রয়োজন হয় তবে নিম্নলিখিতগুলি তা করে:

Files.walk(Paths.get("/path/to/folder"))
     .filter(Files::isRegularFile)
     .collect(Collectors.toList())

যদি আপনি কেবল মানচিত্রের List<File>পরিবর্তে ফিরে যেতে চান List<Path>তবে:

List<File> filesInFolder = Files.walk(Paths.get("/path/to/folder"))
                                .filter(Files::isRegularFile)
                                .map(Path::toFile)
                                .collect(Collectors.toList());

আপনারও প্রবাহটি বন্ধ করার বিষয়টি নিশ্চিত করতে হবে! অন্যথায় আপনি খুব বেশি ফাইল খোলার কথা বলার ব্যতিক্রম হতে পারেন। আরও তথ্যের জন্য এখানে পড়ুন ।


3
.Map (পাথ :: টু ফাইল) এর সাথে একটি ত্রুটি পাওয়াও .এফ (পথ -> System.out.println (path.toString ()); হওয়া উচিত .ফৌচ (পথ -> System.out.println (path.toString ( )));
জাওলিংবাও

2
এটি বলেছে "অবৈধ পদ্ধতির রেফারেন্স, প্রতীকটি খুঁজে পাবে না" "ফাইলে করার পদ্ধতি" টুফাইলে অন্য কিছু বলে মনে করা হচ্ছে?
জাওলিংবাও

2
আপনি কি দয়া করে আপনার কোডটি একটি পেস্টবিনে পেস্ট করতে পারেন? আপনি ব্যবহার করছেন java.nio.file.Path? আমি জাফিয়া 8 -> ডকস.ওরাকল.com
জুলিয়ান পাইস

2
@ নাদজিবমামি দয়া করে এখানে দেখুন: razem.io/blog/posts/year2015/0819_ry_catch_lambda একটি মন্তব্যে উত্তর দেওয়ার জন্য সংকলন করতে হয়েছিল। তাই আমি একটি দ্রুত ব্লগ পোস্ট লিখেছি।
জুলিয়ান পাইস


26

নতুন জাভা 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পদ্ধতির জাভাডোক থেকে :

ফিরে আসা স্ট্রিমটি এক বা একাধিক ডিরেক্টরি স্ট্রিমগুলিকে আবদ্ধ করে। যদি ফাইল সিস্টেমের রিসোর্সগুলির সময়মতো নিষ্পত্তি প্রয়োজন হয়, তবে স্ট্রিমের ক্রিয়াকলাপ সমাপ্ত হওয়ার পরে স্ট্রিমের ঘনিষ্ঠ পদ্ধতিটি প্রবাহিত হয়েছে কিনা তা নিশ্চিত করার জন্য রিসোর্স-কন্ট্রাক্ট চেষ্টা ব্যবহার করা উচিত।


আপনার কখনও স্ট্রিম দিয়ে পুনরাবৃত্তি করা উচিত নয়। আপনি একটি স্ট্রিম রেফারেন্স নিন, এটি ব্যবহার করুন এবং এটির মাধ্যমেও।
রুডলফ শ্মিট

@ रुডল্ফস্মিদট মানে আপনি "ফেলে দিন"?
রোল্যান্ড

1
আমি বলতে চাচ্ছি সঠিক উপায় যে ভাবে এটি ব্যবহার করতে হয়। Files.walk (Paths.get ( "/ হোম / আপনি / ডেস্কটপ")) ফিল্টার (ফাইলস :: isRegularFile) .forEach (filePath -> ...)
রুডল্ফ শ্মিড্ট

12
import java.io.File;


public class ReadFilesFromFolder {
  public static File folder = new File("C:/Documents and Settings/My Documents/Downloads");
  static String temp = "";

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("Reading files under the folder "+ folder.getAbsolutePath());
    listFilesForFolder(folder);
  }

  public static void listFilesForFolder(final File folder) {

    for (final File fileEntry : folder.listFiles()) {
      if (fileEntry.isDirectory()) {
        // System.out.println("Reading files under the folder "+folder.getAbsolutePath());
        listFilesForFolder(fileEntry);
      } else {
        if (fileEntry.isFile()) {
          temp = fileEntry.getName();
          if ((temp.substring(temp.lastIndexOf('.') + 1, temp.length()).toLowerCase()).equals("txt"))
            System.out.println("File= " + folder.getAbsolutePath()+ "\\" + fileEntry.getName());
        }

      }
    }
  }
}

6
স্বাগতম ! কেবল কোডের একটি ব্লক পোস্ট করার পরিবর্তে দয়া করে ব্যাখ্যা করুন যে এই কোডটি কেন ডেকে আনা সমস্যা সমাধান করে। কোনও ব্যাখ্যা ছাড়াই এটি কোনও উত্তর নয়।
মার্টিজন পিটারস

সম্মতি জানানো হয়েছে, কেবল কোডের একটি ব্লক পোস্ট করা কাজ করবে না দয়া করে
কোডটিতে

এটি ভাল কোড হিসাবে, এটি কোনও ফোল্ডারের উপ-ডিরেক্টরিতে ফাইলগুলিও পড়তে পারে।
মিমৌনি

11
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
    }
}

অ্যান্ড্রয়েডের জন্য সমাধানটি এসডিকার্ড বা অভ্যন্তরীণ স্টোরেজ থেকে সমস্ত ফাইল এবং ফোল্ডার পড়ুন।
সংকেত ঠাকর

10

জাভা 7 এবং উচ্চতরতে আপনি তালিকাবদ্ধ ব্যবহার করতে পারেন

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 )


ফিল্টার উদাহরণ তৈরি করে আমি বিভ্রান্ত হয়ে পড়েছি। নতুন ডিরেক্টরী স্ট্রিম ream ফিল্টার <প্যাথ>। আপনি কীভাবে তা ঘোষণা করতে পারেন?
সিমজিনিজার

আমি মনে করি আমি এটি সন্ধান করেছি। এটি একটি অনুলিপি এবং পেস্ট টাইপ। "নতুন" এবং "ডিরেক্টরি স্ট্রিম.ফিল্টার ..." এর মধ্যে একটি স্থান রয়েছে। আমি যদি ঠিক আছি তবে আপনার উদাহরণটি সংশোধন করার পরামর্শ দিন।
সিমগিনিজার

9

ডিরেক্টরিতে সমস্ত ফাইল পান সে অনুযায়ী একটি মন্তব্য।
পদ্ধতিটি Files.walk(path)প্রথমে দেওয়া শুরু করা ফাইলটিতে রুট করা ফাইল ট্রি দিয়ে হাঁটার মাধ্যমে সমস্ত ফাইল ফেরত দেবে।

উদাহরণস্বরূপ, পরবর্তী ফাইল ট্রি রয়েছে:

\---folder
    |   file1.txt
    |   file2.txt
    |
    \---subfolder
            file3.txt
            file4.txt

ব্যবহার java.nio.file.Files.walk(Path):

Files.walk(Paths.get("folder"))
        .filter(Files::isRegularFile)
        .forEach(System.out::println);

নিম্নলিখিত ফলাফল দেয়:

folder\file1.txt
folder\file2.txt
folder\subfolder\file3.txt
folder\subfolder\file4.txt

কেবলমাত্র বর্তমান ডিরেক্টরিতে সমস্ত ফাইল পেতে java.nio.file.Files.list(Path):

Files.list(Paths.get("folder"))
        .filter(Files::isRegularFile)
        .forEach(System.out::println);

ফলাফল:

folder\file1.txt
folder\file2.txt

2020-এ এখনই এই প্রশ্নের একমাত্র উত্তর হওয়া উচিত :)
হারামোজ

Files.listউদাহরণস্বরূপ upvote । আপনি যদি পুনরাবৃত্তভাবে অনুসন্ধান করতে না চান তবে এটি কখনও কখনও সেরা বিকল্প হতে পারে।
প্রতি লন্ডবার্গ

7

সমস্ত Files.walkFileTreeজাভা ব্যবহার করে চলুন (জাভা 7)

Files.walkFileTree(Paths.get(dir), new SimpleFileVisitor<Path>() {
    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
        System.out.println("file: " + file);
        return FileVisitResult.CONTINUE;
    }
});

দ্রষ্টব্য, এই কোডটি একটি ব্যতিক্রম ছুঁড়ে ফেলবে (এবং কোনও ফাইলের রিপোর্ট না করে) যদি কোনও ফাইল বা ডিরেক্টরিতে যদি ফাইলের বৈশিষ্ট্যগুলি পড়তে না পারে, যেমন অনুমতিগুলির কারণে। `C: on এ পুনরুত্পাদন করা সহজ`
টমাস এস

5

আপনি যদি আরও বিকল্প চান, আপনি এই ফাংশনটি ব্যবহার করতে পারেন যা একটি ফোল্ডারে উপস্থিত ফাইলগুলির একটি অ্যারেলিস্টকে পপুলেট করা। বিকল্পগুলি হ'ল: পুনরাবৃত্তি এবং মিলের প্যাটার্ন।

public static ArrayList<File> listFilesForFolder(final File folder,
        final boolean recursivity,
        final String patternFileFilter) {

    // Inputs
    boolean filteredFile = false;

    // Ouput
    final ArrayList<File> output = new ArrayList<File> ();

    // Foreach elements
    for (final File fileEntry : folder.listFiles()) {

        // If this element is a directory, do it recursivly
        if (fileEntry.isDirectory()) {
            if (recursivity) {
                output.addAll(listFilesForFolder(fileEntry, recursivity, patternFileFilter));
            }
        }
        else {
            // If there is no pattern, the file is correct
            if (patternFileFilter.length() == 0) {
                filteredFile = true;
            }
            // Otherwise we need to filter by pattern
            else {
                filteredFile = Pattern.matches(patternFileFilter, fileEntry.getName());
            }

            // If the file has a name which match with the pattern, then add it to the list
            if (filteredFile) {
                output.add(fileEntry);
            }
        }
    }

    return output;
}

সেরা, অ্যাড্রিন


4
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";
       }
}

1
আপনি কেবল কোড দেখানোর পরিবর্তে আপনি কী অর্জন করার চেষ্টা করছেন তা ব্যাখ্যা যোগ করতে চাইতে পারেন। তদ্ব্যতীত, myarray=new File[10];প্রয়োজন হয় না, কারণ এটি পরবর্তী লাইনে ওভাররাইট করা হবে!
ভিজার

3

https://stackoverflow.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();
    }
});

docs.oracle.com/javase/7/docs/api/java/io/… সর্বজনীন ফাইল [] listFiles () এই বিমূর্ত পথের নাম দ্বারা নির্দেশিত ডিরেক্টরিতে ফাইলগুলি নির্দেশ করে এমন অ্যাবস্ট্রাক্ট প্যাথনামগুলির একটি অ্যারের ফেরত দেয়।
andrej

3
    static File mainFolder = new File("Folder");
    public static void main(String[] args) {

        lf.getFiles(lf.mainFolder);
    }
    public void getFiles(File f) {
        File files[];
        if (f.isFile()) {
            String name=f.getName();

        } else {
            files = f.listFiles();
            for (int i = 0; i < files.length; i++) {
                getFiles(files[i]);
            }
        }
    }

3

আমি মনে করি এটি একটি ফোল্ডার এবং সাব ফোল্ডারের সমস্ত ফাইল পড়ার ভাল উপায়

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);
    }
}

3

কমান্ড-লাইনে নির্দিষ্ট ডিরেক্টরিগুলিতে ফাইলগুলি পুনরাবৃত্তভাবে তালিকাভুক্ত করতে জাভা 1.7 এর সাথে কাজ করে এমন একটি সহজ উদাহরণ:

import java.io.File;

public class List {
    public static void main(String[] args) {
        for (String f : args) {
            listDir(f);
        }
    }

    private static void listDir(String dir) {
        File f = new File(dir);
        File[] list = f.listFiles();

        if (list == null) {
            return;
        }

        for (File entry : list) {
            System.out.println(entry.getName());
            if (entry.isDirectory()) {
                listDir(entry.getAbsolutePath());
            }
        }
    }
}

3

যদিও আমি রিচ, ওরিয়ান এবং ব্যবহারের জন্য বাকীগুলির সাথে একমত নই:

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

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

কোনও কারণে এখানে সমস্ত উদাহরণ নিখুঁত পথ ব্যবহার করে (যেমন রুট থেকে সমস্ত পথ, বা, উইন্ডোজের জন্য ড্রাইভ লেটার (সি: \) বলে ..)

আমি যোগ করতে চাই যে পাশাপাশি আপেক্ষিক পথ ব্যবহার করা সম্ভব । সুতরাং, যদি আপনি পিডব্লিউডি (বর্তমান ডিরেক্টরি / ফোল্ডার) ফোল্ডার 1 এবং আপনি ফোল্ডার 1 / সাবফোল্ডার পার্স করতে চান তবে আপনি কেবল লিখুন (এর পরিবর্তে উপরের কোডে):

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

2
package com;


import java.io.File;

/**
 *
 * @author ?Mukesh
 */
public class ListFiles {

     static File mainFolder = new File("D:\\Movies");

     public static void main(String[] args)
     {
         ListFiles lf = new ListFiles();
         lf.getFiles(lf.mainFolder);

         long fileSize = mainFolder.length();
             System.out.println("mainFolder size in bytes is: " + fileSize);
             System.out.println("File size in KB is : " + (double)fileSize/1024);
             System.out.println("File size in MB is :" + (double)fileSize/(1024*1024));
     }
     public void getFiles(File f){
         File files[];
         if(f.isFile())
             System.out.println(f.getAbsolutePath());
         else{
             files = f.listFiles();
             for (int i = 0; i < files.length; i++) {
                 getFiles(files[i]);
             }
         }
     }
}

2

জাভা 8 Files.walk(..)ভাল যখন আপনি খুব বেশি হন তখন এটি জাভা 8 ফাইলসওয়াক (..) সমাপ্তির কারণ (java.nio.file.AccessDeniedException) এড়ানো হবে না ।

জাভা 8 এর মতো মার্জিত না হলেও এটি একটি নিরাপদ সমাধান Files.walk(..):

int[] count = {0};
try {
    Files.walkFileTree(Paths.get(dir.getPath()), new HashSet<FileVisitOption>(Arrays.asList(FileVisitOption.FOLLOW_LINKS)),
            Integer.MAX_VALUE, new SimpleFileVisitor<Path>() {
                @Override
                public FileVisitResult visitFile(Path file , BasicFileAttributes attrs) throws IOException {
                    System.out.printf("Visiting file %s\n", file);
                    ++count[0];

                    return FileVisitResult.CONTINUE;
                }

                @Override
                public FileVisitResult visitFileFailed(Path file , IOException e) throws IOException {
                    System.err.printf("Visiting failed for %s\n", file);

                    return FileVisitResult.SKIP_SUBTREE;
                }

                @Override
                public FileVisitResult preVisitDirectory(Path dir , BasicFileAttributes attrs) throws IOException {
                     System.out.printf("About to visit directory %s\n", dir);
                    return FileVisitResult.CONTINUE;
                }
            });
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

1
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);
            }
        }
    }

1

কেবলমাত্র গৃহীত উত্তরের উপর প্রসারিত করতে আমি ফাইলের নামগুলি একটি অ্যারেলিস্টে সঞ্চয় করি (কেবলমাত্র সেগুলি System.out.println এ ফেলে দেওয়ার পরিবর্তে) আমি একটি সহায়ক ক্লাস "মাইফাইলেটস" তৈরি করেছি যাতে এটি অন্যান্য প্রকল্পের দ্বারা আমদানি করা যায়:

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);
}

অ্যারেলিস্টটি "মান" দ্বারা পাস করা হয় তবে মানটি JVM হিপে থাকা একই অ্যারেলিস্ট বস্তুকে নির্দেশ করতে ব্যবহৃত হয়। এইভাবে, প্রতিটি পুনরাবৃত্তি কল একই অ্যারেলিস্টে ফাইলের নাম যুক্ত করে (আমরা প্রতিটি পুনরাবৃত্ত কলটিতে একটি নতুন অ্যারেলিস্ট তৈরি করছি না)।


1

আপনি আর্গুমেন্টের জন্য ফাইলের পাথ রাখতে পারেন এবং সমস্ত ফাইলপথের সাথে একটি তালিকা তৈরি করতে পারেন এবং ম্যানুয়ালি এটিকে তালিকাটি স্থাপন করতে পারেন না। তারপরে একটি লুপ এবং একটি পাঠকের জন্য ব্যবহার করুন। Txt ফাইলের উদাহরণ:

public static void main(String[] args) throws IOException{    
File[] files = new File(args[0].replace("\\", "\\\\")).listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.endsWith(".txt"); } });
    ArrayList<String> filedir = new ArrayList<String>();
    String FILE_TEST = null;
    for (i=0; i<files.length; i++){
            filedir.add(files[i].toString());
            CSV_FILE_TEST=filedir.get(i) 

        try(Reader testreader = Files.newBufferedReader(Paths.get(FILE_TEST));
            ){
              //write your stuff
                 }}}

1
package com.commandline.folder;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;

public class FolderReadingDemo {
    public static void main(String[] args) {
        String str = args[0];
        final File folder = new File(str);
//      listFilesForFolder(folder);
        listFilesForFolder(str);
    }

    public static void listFilesForFolder(String str) {
        try (Stream<Path> paths = Files.walk(Paths.get(str))) {
            paths.filter(Files::isRegularFile).forEach(System.out::println);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void listFilesForFolder(final File folder) {
        for (final File fileEntry : folder.listFiles()) {
            if (fileEntry.isDirectory()) {
                listFilesForFolder(fileEntry);
            } else {
                System.out.println(fileEntry.getName());
            }
        }
    }

}

0
import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class AvoidNullExp {

public static void main(String[] args) {

    List<File> fileList =new ArrayList<>();
     final File folder = new File("g:/master");
     new AvoidNullExp().listFilesForFolder(folder, fileList);
}

    public void listFilesForFolder(final File folder,List<File> fileList) {
        File[] filesInFolder = folder.listFiles();
        if (filesInFolder != null) {
            for (final File fileEntry : filesInFolder) {
                if (fileEntry.isDirectory()) {
                    System.out.println("DIR : "+fileEntry.getName());
                listFilesForFolder(fileEntry,fileList);
            } else {
                System.out.println("FILE : "+fileEntry.getName());
                fileList.add(fileEntry);
            }
         }
        }
     }


}

0

ক্লাস পাথের ভিতরে উপস্থিত টেস্ট ফোল্ডার থেকে ফাইলগুলি তালিকাভুক্ত করুন

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()));
                }
            }
        }


    }


}

0
/**
 * Function to read all mp3 files from sdcard and store the details in an
 * ArrayList
 */


public ArrayList<HashMap<String, String>> getPlayList() 
    {
        ArrayList<HashMap<String, String>> songsList=new ArrayList<>();
        File home = new File(MEDIA_PATH);

        if (home.listFiles(new FileExtensionFilter()).length > 0) {
            for (File file : home.listFiles(new FileExtensionFilter())) {
                HashMap<String, String> song = new HashMap<String, String>();
                song.put(
                        "songTitle",
                        file.getName().substring(0,
                                (file.getName().length() - 4)));
                song.put("songPath", file.getPath());

                // Adding each song to SongList
                songsList.add(song);
            }
        }
        // return songs list array
        return songsList;
    }

    /**
     * Class to filter files which have a .mp3 extension
     * */
    class FileExtensionFilter implements FilenameFilter 
    {
        @Override
        public boolean accept(File dir, String name) {
            return (name.endsWith(".mp3") || name.endsWith(".MP3"));
        }
    }

আপনি যে কোনও পাঠ্য ফাইল বা অন্য কোনও এক্সটেনশন ফিল্টার করতে পারেন .. এটি এমপি 3 দিয়ে প্রতিস্থাপন করুন


0

উপরে অনেকগুলি ভাল উত্তর রয়েছে, এখানে একটি পৃথক পদ্ধতির: একটি ম্যভেন প্রকল্পে, আপনি সংস্থান ফোল্ডারে যা কিছু রেখেছেন তা লক্ষ্য / শ্রেণি ফোল্ডারে ডিফল্টরূপে অনুলিপি করা হয়। রানটাইমে কী পাওয়া যায় তা দেখতে

 ClassLoader contextClassLoader = 
 Thread.currentThread().getContextClassLoader();
    URL resource = contextClassLoader.getResource("");
    File file = new File(resource.toURI());
    File[] files = file.listFiles();
    for (File f : files) {
        System.out.println(f.getName());
    }

এখন একটি নির্দিষ্ট ফোল্ডার থেকে ফাইলগুলি পেতে, আসুন আপনার রিসোর্স ফোল্ডারে আপনার কাছে 'রেজ' নামে একটি ফোল্ডার রয়েছে, কেবল এটি প্রতিস্থাপন করুন:

URL resource = contextClassLoader.getResource("res");

আপনি যদি আপনার com.companyName প্যাকেজে অ্যাক্সেস রাখতে চান তবে:

contextClassLoader.getResource("com.companyName");

0

এটি প্রদত্ত পথে নির্দিষ্ট ফাইল এক্সটেনশন ফাইলগুলি পড়বে (উপ ফোল্ডারগুলিও দেখায়)

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;
}

দুঃখিত যদি এটি একটি খুব প্রশ্ন তবে আমি কী হিসাবে পাস করব files container?
বজ্রাচার্য

0

এটি ভাল কাজ করবে:

private static void addfiles(File inputValVal, ArrayList<File> files)
{
  if(inputVal.isDirectory())
  {
    ArrayList <File> path = new ArrayList<File>(Arrays.asList(inputVal.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));
        }
     }

    /*  Optional : if you need to have the counts of all the folders and files you can create 2 global arrays 
        and store the results of the above 2 if loops inside these arrays */
   }

   if(inputVal.isFile())
   {
     files.add(inputVal);
   }

}

0

একটি বেসডির দেওয়া, এর নীচে সমস্ত ফাইল এবং ডিরেক্টরিগুলি পুনরাবৃত্তভাবে লিখিত আছে।

    public static List<File> listLocalFilesAndDirsAllLevels(File baseDir) {

    List<File>  collectedFilesAndDirs   = new ArrayList<>();
    Deque<File> remainingDirs           = new ArrayDeque<>();

    if(baseDir.exists()) {
        remainingDirs.add(baseDir);

        while(!remainingDirs.isEmpty()) {
            File dir = remainingDirs.removeLast();
            List<File> filesInDir = Arrays.asList(dir.listFiles());
            for(File fileOrDir : filesInDir)  {
                collectedFilesAndDirs.add(fileOrDir);
                if(fileOrDir.isDirectory()) {
                    remainingDirs.add(fileOrDir);
                }
            }
        }
    }

    return collectedFilesAndDirs;
}

-1

তালিকার ফাইলগুলি () ফাংশনে নালপয়েন্টেরেক্সেপশনগুলি রোধ করতে এবং পুনরুক্তরূপে সাব-ডাইরেক্টরিগুলি থেকে সমস্ত ফাইলও পান ..

 public void listFilesForFolder(final File folder,List<File> fileList) {
    File[] filesInFolder = folder.listFiles();
    if (filesInFolder != null) {
        for (final File fileEntry : filesInFolder) {
            if (fileEntry.isDirectory()) {
            listFilesForFolder(fileEntry,fileList);
        } else {
            fileList.add(fileEntry);
        }
     }
    }
 }

 List<File> fileList = new List<File>();
 final File folder = new File("/home/you/Desktop");
 listFilesForFolder(folder);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.