Java dir/files list -


i trying list directories , files within directory, while "d:\data" works, "d:\" doesn't. "d" secondary disk.

this exception:

exception in thread "main" java.lang.nullpointerexception     @ java.util.objects.requirenonnull(objects.java:203)     @ java.util.arrays$arraylist.<init>(arrays.java:3813)     @ java.util.arrays.aslist(arrays.java:3800)     @ project.1.scavenger.listf(scavenger.java:19)     @ project.1.scavenger.listf(scavenger.java:30)     @ project.1.scavenger.listf(scavenger.java:30)     @ project.1.main(project1.java:28) java result: 1 build successful (total time: 0 seconds) 

code:

public static list<file> listf(string directoryname) throws ioexception {     file directory = new file(directoryname);     list<file> resultlist = new arraylist<file>();      // files directory     file[] flist = directory.listfiles();     resultlist.addall(arrays.aslist(flist));     (file file : flist) {         if (file.isfile()) {             system.out.println(file.getabsolutepath());             try {                 system.out.println(scavenger.checkmime(file.getabsolutepath()));             } catch (exception ex) {             }         } else if (file.isdirectory()) {             resultlist.addall(listf(file.getabsolutepath()));         }     }     // system.out.println(flist);     return resultlist; }  public static string checkmime(string fl) throws malformedurlexception, ioexception {     file file = new file(fl);     string mimetype = file.tourl().openconnection().getcontenttype();     // system.out.println(mimetype);     return mimetype; } 

what's wrong code?

removed error version

in recursion never ask null values. , should run this:

  public static list<file> listf(string directoryname) throws ioexception {     file directory = new file(directoryname);      list<file> resultlist = new arraylist<>();      // files directory     file[] flist = directory.listfiles();     // missing     if (flist == null) {       return null;     }     resultlist.addall(arrays.aslist(flist));     (file file : flist) {       if (file.isfile()) {         system.out.println(file.getabsolutepath());         try {           system.out.println(checkmime(file.getabsolutepath()));         } catch (exception ex) {          }       } else if (file.isdirectory()) {         // ask here if null         list<file> files = listf(file.getabsolutepath());         if (files != null) {           resultlist.addall(files);         }       }     }     //system.out.println(flist);     return resultlist;   } 

why d:\data works , d:\ not

in every root of drive in windows system hidden folder structure called $recycle.bin. in folder windows stores each user (sid) own folder deleted data (links it). normal user allowed first level , not user folder (with sid value name).

(german windows: papierkorb = trash)

enter image description here

a maybe better solution:

a maybe better way of doing such searchings in tree's create iterator on directory tree (like composite iterator). solution uses java nio features, platform should changeable (haven't tested!) ex. linux.

directorytreeiterator.java

import java.io.ioexception; import java.io.uncheckedioexception; import java.nio.file.files; import java.nio.file.path; import java.util.arraydeque; import java.util.deque; import java.util.iterator;  public class directorytreeiterator implements iterator<path> {    private final deque<iterator<path>> deque = new arraydeque<>();    public directorytreeiterator(iterator<path> it) {     deque.push(it);   }    @override   public boolean hasnext() {     if (deque.isempty()) {       return false;     } else {       iterator<path> = deque.peek();       if (!it.hasnext()) {         deque.pop();         return hasnext();       } else {         return true;       }     }   }    @override   public path next() {     if (hasnext()) {       iterator<path> = deque.peek();       path p = it.next();       try {         // here magic recursive on filtered paths         if (files.isdirectory(p) && files.isreadable(p) && !files.ishidden(p)) {           deque.push(files.newdirectorystream(p).iterator());         }       } catch (ioexception ex) {         throw new uncheckedioexception(ex);       }       return p;     } else {       return null;     }   }  } 

then able use charm:

filelister.java

import java.io.ioexception; import java.nio.file.files; import java.nio.file.path; import java.nio.file.paths; import java.util.iterator;  public class filelister {    public static void main(string[] args) throws ioexception {     path p = paths.get("d:\\");      iterator<path> = files.newdirectorystream(p).iterator();     directorytreeiterator dti = new directorytreeiterator(it);     while (dti.hasnext()) {       path path = dti.next();       if (!files.isdirectory(path)) {         string mime = files.probecontenttype(path);         system.out.println("mime of file "                 + path.getfilename() + " is: " + mime);       }     }   } } 

Comments

Popular posts from this blog

powershell Start-Process exit code -1073741502 when used with Credential from a windows service environment -

twig - Using Twigbridge in a Laravel 5.1 Package -

c# - LINQ join Entities from HashSet's, Join vs Dictionary vs HashSet performance -