/jEdit/tags/jedit-4-5-pre1/org/gjt/sp/jedit/bsh/commands/dir.java
Java | 102 lines | 72 code | 15 blank | 15 comment | 9 complexity | d64faf54fdcc907e56af5d4ef681182c MD5 | raw file
Possible License(s): BSD-3-Clause, AGPL-1.0, Apache-2.0, LGPL-2.0, LGPL-3.0, GPL-2.0, CC-BY-SA-3.0, LGPL-2.1, GPL-3.0, MPL-2.0-no-copyleft-exception, IPL-1.0
- /**
- Display the contents of the current working directory.
- The format is similar to the Unix ls -l
- <em>This is an example of a bsh command written in Java for speed.</em>
-
- @method void dir( [ String dirname ] )
- */
- package org.gjt.sp.jedit.bsh.commands;
- import java.io.*;
- import org.gjt.sp.jedit.bsh.*;
- import java.util.Date;
- import java.util.GregorianCalendar;
- import java.util.Calendar;
- public class dir
- {
- static final String [] months = { "Jan", "Feb", "Mar", "Apr",
- "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
- public static String usage() {
- return "usage: dir( String dir )\n dir()";
- }
- /**
- Implement dir() command.
- */
- public static void invoke( Interpreter env, CallStack callstack )
- {
- String dir = ".";
- invoke( env, callstack, dir );
- }
- /**
- Implement dir( String directory ) command.
- */
- public static void invoke(
- Interpreter env, CallStack callstack, String dir )
- {
- File file;
- try {
- file = env.pathToFile( dir );
- } catch (IOException e ) {
- env.println("error reading path: "+e);
- return;
- }
- if ( !file.exists() || !file.canRead() ) {
- env.println( "Can't read " + file );
- return;
- }
- if ( !file.isDirectory() ) {
- env.println("'"+dir+"' is not a directory");
- }
- String [] files = file.list();
- files = StringUtil.bubbleSort(files);
- for( int i=0; i< files.length; i++ ) {
- File f = new File( dir + File.separator + files[i] );
- StringBuilder sb = new StringBuilder();
- sb.append( f.canRead() ? "r": "-" );
- sb.append( f.canWrite() ? "w": "-" );
- sb.append( "_" );
- sb.append( " ");
- Date d = new Date(f.lastModified());
- GregorianCalendar c = new GregorianCalendar();
- c.setTime(d);
- int day = c.get(Calendar.DAY_OF_MONTH);
- sb.append( months[ c.get(Calendar.MONTH) ] + " " + day );
- if ( day < 10 )
- sb.append(" ");
- sb.append(" ");
- // hack to get fixed length 'length' field
- int fieldlen = 8;
- StringBuilder len = new StringBuilder();
- for(int j=0; j<fieldlen; j++)
- len.append(" ");
- len.insert(0, f.length());
- len.setLength(fieldlen);
- // hack to move the spaces to the front
- int si = len.toString().indexOf(" ");
- if ( si != -1 ) {
- String pad = len.toString().substring(si);
- len.setLength(si);
- len.insert(0, pad);
- }
-
- sb.append( len.toString() );
- sb.append( " " + f.getName() );
- if ( f.isDirectory() )
- sb.append("/");
- env.println( sb.toString() );
- }
- }
- }