ColdFusion UDF Library - getFiles

December 16th, 2008
«« Back to ColdFusion Library

Category:
   SYSTEM

Description:
   A Java based CFML UDF to get a list of files from the specified path.

Parameters:
  1. path (String, required)
           The path or filename to start getting a list of files from. This can be a full or relative path.

  2. filter (RegularExpression, Default: )
           A regular expression to filter the results by. Default is no filter.

  3. type (Numeric, Default: 0)
           Return all types, directories only, or files only.

           Values:
    • 0 - Return both files and directories.

    • 1 - Return directories only.

    • 2 - Return files only.

  4. recurse (Numeric, Default: 0)
           How many levels of sub directors to recurse through. 0 is none, -1 is all.


Returns:
       A query containing the following columns: fullpath,directory,name,extension,type,isDirectory,isFile,size,dateLastModified,isHidden,isReadonly,children

Requires:
       queryConcat()

Sample Use:
       

Copy to Clipboard
/* #depends:queryConcat# */
function getFiles(path){
	var handle = "";
	var handle2 = "";
	var filelist = "";
	var filelist2 = "";
	var handle3 = "";
	var size = 0;
	var count = 0;
	var loop = 0;
	var loop2 = 0;
	var date = "";
	var recurse = 0;
	var depth = 0;
	var filter = ".*";
	var type = 0;
	var value = queryNew("fullpath,directory,name,extension,type,isDirectory,isFile,size,dateLastModified,isHidden,isReadOnly,children");
	var recurses = arrayNew(1);
	if (arrayLen(arguments) gte 2 and isSimpleValue(arguments[2]))filter = arguments[2];
	if (arrayLen(arguments) gte 3 and isNumeric(arguments[3]))type = arguments[3];
	if (arrayLen(arguments) gte 4 and isNumeric(arguments[4]))recurse = arguments[4];
	if (arrayLen(arguments) gte 5 and isNumeric(arguments[5]))depth = arguments[5];
	handle = createObject("java","java.io.File").init(path);
	if (handle.exists()){
		if (handle.isDirectory()){
			filelist = handle.list();
			for (loop = 1; loop lte arrayLen(filelist); loop = incrementValue(loop)){
				handle2 = createObject("java","java.io.File").init("#handle.getAbsolutePath()#\#filelist[loop]#");
				if (handle2.isDirectory() and (recurse gt depth or recurse eq -1))recurses[arrayLen(recurses)+1] = getFiles(handle2.getAbsolutePath(),filter,type,recurse,incrementValue(depth));
				if (reFindNoCase(filter,filelist[loop])){
					if (type eq 0 or (type eq 1 and handle2.isDirectory()) or (type eq 2 and handle2.isFile())){
						filelist2 = handle2.list();
						if (isDefined("filelist2")){
							count = arrayLen(filelist2);
							for (loop2 = 1; loop2 lte arrayLen(filelist2); loop2 = incrementValue(loop2)){
								handle3 = createObject("java","java.io.File").init("#handle.getAbsolutePath()#\#filelist[loop]#\#filelist2[loop2]#");
								size = size+handle3.length();
							}
						}
						else{
							size = handle2.length();
							count = 0;
						}
						date = createObject("java","java.util.Date").init(handle2.lastModified());
						queryAddRow(value);
						querySetCell(value,"fullpath",handle2.getAbsolutePath());
						querySetCell(value,"directory",left(getDirectoryFromPath(handle2.getAbsolutePath()),len(getDirectoryFromPath(handle2.getAbsolutePath()))-1));
						querySetCell(value,"name",getFileFromPath(handle2.getAbsolutePath()));
						querySetCell(value,"extension",iif(findNoCase(".",handle2.getPath()),de(listLast(handle2.getPath(),".")),de("")));
						querySetCell(value,"type",iif(handle2.isDirectory(),de("dir"),de("file")));
						querySetCell(value,"isDirectory",handle2.isDirectory());
						querySetCell(value,"isFile",handle2.isFile());
						querySetCell(value,"size",size);
						querySetCell(value,"dateLastModified",date);
						querySetCell(value,"isHidden",yesNoFormat(handle2.isHidden()));
						querySetCell(value,"isReadOnly",yesNoFormat(not handle2.canWrite()));
						querySetCell(value,"children",count);
					};
				};
			};
		}
		else{
			if (type eq 0 or type eq 2){
				if (reFindNoCase(filter,getFileFromPath(handle.getAbsolutePath()))){
					date = createObject("java","java.util.Date").init(handle.lastModified());
					queryAddRow(value);
					querySetCell(value,"fullpath",handle.getAbsolutePath());
					querySetCell(value,"directory",left(getDirectoryFromPath(handle.getAbsolutePath()),len(getDirectoryFromPath(handle.getAbsolutePath()))-1));
					querySetCell(value,"name",getFileFromPath(handle.getAbsolutePath()));
					querySetCell(value,"extension",iif(findNoCase(".",handle.getPath()),de(listLast(handle.getPath(),".")),de("")));
					querySetCell(value,"type",iif(handle.isDirectory(),de("dir"),de("file")));
					querySetCell(value,"isDirectory",handle.isDirectory());
					querySetCell(value,"isFile",handle.isFile());
					querySetCell(value,"size",size);
					querySetCell(value,"dateLastModified",date);
					querySetCell(value,"isHidden",yesNoFormat(handle.isHidden()));
					querySetCell(value,"isReadOnly",yesNoFormat(not handle.canWrite()));
					querySetCell(value,"children",count);
				};
			};
		}
	}
	for (loop = 1; loop lte arrayLen(recurses); loop = incrementValue(loop))value = server.queryConcat(value,recurses[loop]);
	return value;
}
// http://www.programmers.org/index.php/coldfusion-udf-library/?ckey=93&function=getFiles
  1. No comments yet.
  1. No trackbacks yet.