FileSystemTools.java

package eu.javaexperience.file;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import eu.javaexperience.arrays.ArrayTools;
import eu.javaexperience.file.fs.classloader.ClassLoaderFileSystem;
import eu.javaexperience.file.fs.os.OsFile;
import eu.javaexperience.file.fs.os.OsFileSystem;
import eu.javaexperience.file.fs.os.dir.OsDirectoryFilesystem;
import eu.javaexperience.file.fs.zip.ZipFileSystem;
import eu.javaexperience.regex.RegexTools;

public class FileSystemTools
{
	public static AbstractFileSystem DEFAULT_FILESYSTEM = new OsFileSystem();
	
	public static AbstractFileSystem SYSTEM_CLASSLOADER_FILESYSTEM = new ClassLoaderFileSystem(ClassLoader.getSystemClassLoader());

	public static AbstractFileSystem [] emptyAbstractFileSystemArray = new AbstractFileSystem[0];

	public static AbstractFile[] emptyAbstractFileArray = new AbstractFile[0];
	
	public static AbstractFile[] warpFiles(File... fs)
	{
		AbstractFile[] ret = new AbstractFile[fs.length];
		for(int i=0;i<ret.length;++i)
		{
			ret[i] = new OsFile(fs[i]);
		}
		return ret;
	}
	
	public static String[] decomposePath(String p)
	{
		String[] ret = RegexTools.SLASHES_LINUX_WINDOWS.split(p);
		
		for(int i=0;i<ret.length;++i)
		{
			if("".equals(ret[i]))
			{
				ret[i] = null;
			}
		}
		
		return ArrayTools.withoutNulls(ret);
	}
	
	public static void find(AbstractFile root, Collection<AbstractFile> res)
	{
		res.add(root);
		if(root.isDirectory())
		{
			for(AbstractFile f:root.listFiles())
			{
				find(f,res);
			}
		}
	}
	
	public static List<AbstractFileSystem> collectJavaClassPathFileSystems()
	{
		ArrayList<AbstractFileSystem> ret = new ArrayList<>();
		
		ClassLoader cl = ClassLoader.getSystemClassLoader();
		if(cl instanceof URLClassLoader)
		{
			URL[] urls = ((URLClassLoader)cl).getURLs();
	
			for(URL url: urls)
			{
				File f = new File(url.getFile());
				if(f.exists())
				{
					try
					{
						if(f.toString().endsWith(".jar"))
						{
							ret.add(new ZipFileSystem(f.toString()));
						}
						else
						{
							ret.add(new OsDirectoryFilesystem(f));
						}
					}
					catch (IOException e)
					{
						e.printStackTrace();
					}
				}
			}
		}
		
		//ret.add(FileSystemTools.SYSTEM_CLASSLOADER_FILESYSTEM);
		//ret.add(FileSystemTools.DEFAULT_FILESYSTEM);
		return ret;
	}
}