java题目,我新手不知道怎么做

2024-12-03 20:42:24
推荐回答(1个)
回答1:

import java.io.File;
import java.io.FileFilter;
import java.util.Arrays;
import java.util.Date;

/**
 * 


 * Description: 

 * The -verbose switch tells the program to display the size of the file and
 * date last modified; 

 * "non-verbose" mode just shows the file name. 

 * The -R switch tells the program to show the directory specified and
 * recursively descend into the sub-directories and display these (with some
 * spacing for indentation).
 */
public class DirListing
{
private static void list(final boolean R, final boolean verbose, final File path, final boolean indentation)
{
File dirt = path;
if(null == path)
{
dirt = new File(DirListing.class.getResource("./").getFile());
}
dirt.listFiles(new FileFilter()
{
@Override
public boolean accept(File pathname)
{
if(indentation)
{
System.out.print("\t");
}
System.out.print(pathname.getName());
if(verbose)
{
File f = pathname.getAbsoluteFile();
if(pathname.isFile())
{
String lenstr = "";
double len = f.length() * 1.0 / 1024;
if(len < 1024)
{
lenstr = String.format("%.2f", len) + " KB";
}
else if(len < Math.pow(1024, 2))
{
lenstr = String.format("%.2f", len * 1.0 / 1024) + " MB";
}
else if(len < Math.pow(1024, 3))
{
lenstr = String.format("%.2f", len * 1.0 / Math.pow(1024, 2)) + " GB";
}
else if(len < Math.pow(1024, 4))
{
lenstr = String.format("%.2f", len * 1.0 / Math.pow(1024, 3)) + " TB";
}
System.out.printf("\t\t%s", lenstr);
}
System.out.printf("\t\t%1$tY/%1$tm/%1$te, %1$tH:%1$tM:%1$tS",
                new Date(f.lastModified()));
}
System.out.println();
if(R)
{
if(pathname.isDirectory())
{
list(R, verbose, pathname, true);
}
}
return true;
}
});
}

public static void main(String[] args)
{
// the current working directory, if no argument was specified
if(args.length == 0)
{
list(false, false, null, false);
}
else
{
String params = Arrays.toString(args).replaceAll("[\\[\\],]", "");
// -verbose c:
// -R c:
// -verbose -R c:
// -R -verbose c:
// c:
if(!params.matches(
    "^((-(verbose|R)(\\s.+)?)|(((-verbose\\s-R)|(-R\\s-verbose))(\\s.+)?)|(?:(?!-(R|verbose)).)+)$"))
{
System.err.println("Parameter format is not correct - \"" + params + "\"。");
return;
}
File f = null;
String path = args[args.length - 1];
if(!path.matches("^-(R|verbose)$"))
{
f = new File(args[args.length - 1]);
if(!f.exists())
{
System.err.println("The system could not find the drive specified.");
return;
}
}
list(params.matches(".*(?<=(^|\\s))-R(?=(\\s|$)).*"),
    params.matches(".*(?<=(^|\\s))-verbose(?=(\\s|$)).*"), f, false);
}
}
}