开发者

java listing the txt files in sub folders

开发者 https://www.devze.com 2023-03-18 23:27 出处:网络
Hi I ha开发者_如何学Gove a jlist and currently it is viewing a folder + subfolders... Now i would like to change this to view the files in the subfolders as well. below please find the code I am curre

Hi I ha开发者_如何学Gove a jlist and currently it is viewing a folder + subfolders... Now i would like to change this to view the files in the subfolders as well. below please find the code I am currently using:

 jList1.setModel(new javax.swing.AbstractListModel()
        {

            File folder = new File ("/Assignment_Datex/message_outbox/"); 
            File[] listofFiles = folder.listFiles();



       // @Override
                public int getSize() 
                { return listofFiles.length; }
       // @Override
                public Object getElementAt(int i) 
                { return listofFiles[i];}
            }

            );

java listing the txt files in sub folders

Right now as you can see in the screenshot, the Jlist is only viewing the folders and not the files in them... Any help please?


If you want to show all files and folder under some root folder then you should try someting like this...

  1. Get files and folders under root folder.
  2. Loop over them and check if it is file or folder.
  3. If file then just add to list nothing more.
  4. If folder then add it to list and repeat this same steps for that folder until all folder and files are traveled.

I can not produce whole code here but this is a prototype for this:

void addFilesToList(File folder){
   File[] listofFiles = folder.listFiles();
   for(File file:listofFile){
      if(file.isFile()) // --- file
         list.add(file.getName());
      else{             // --- folder
         addFileToList(file);
      }
   }
}

The above code is not tested so may need to modify it to fit your need.


@Harry Joy is right. Additionally you can also use FindFile from jakarta project. It can save your time.


You create a constructor to initialise your class, and there you put (tested and working)


        // initialize the class variable
        listofFiles = new ArrayList();     
        // initialize with the path
        File f = new File("/home/albertmatyi/Work/python/");
        // create a temporary list to work with
        LinkedList files = new LinkedList();
        // fill it with the contents of your path
        files.addAll(Arrays.asList(f.listFiles()));
        while (!files.isEmpty()) {
            // keep removing elements from the list
            f = files.pop();
            // if it is a directory add its contents to the files list
            if (f.isDirectory()) {
                files.addAll(Arrays.asList(f.listFiles()));
                // and skip the last if
                continue;
            }
            // check if it's a text file, and add it to listofFiles
            if (f.getName().endsWith(".txt"))
                listofFiles.add(f);
        }


EDIT:

Note: I've changed the type of listofFiles to ArrayList<File>, which has to be initialized in the constructor using:

listofFiles = new ArrayList<File>();

This allows easier manipulation of the data - no need to manually allocate bigger space for when more text files need to be added


I think this is good way to read all .txt files in a folder and sub folder's

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())
                {
                    String name=(path.get(i)).getName();
                    if(name.lastIndexOf('.')>0)
                    {
                        int lastIndex = name.lastIndexOf('.');
                        String str = name.substring(lastIndex);
                        if(str.equals(".txt"))
                        {
                            files.add(path.get(i));
                        }
                    }
                }
            }
        }
        if(input.isFile())
        {
            String name=(input.getName());
            if(name.lastIndexOf('.')>0)
            {
                int lastIndex = name.lastIndexOf('.');
                String str = name.substring(lastIndex);
                if(str.equals(".txt"))
                {
                    files.add(input);
                }
            }
        }

    }

Now you have a list of files that you can do some process on it!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号