bsh.commands.dir Maven / Gradle / Ivy
The newest version!
/*
* #%L
* The AIBench Shell Plugin
* %%
* Copyright (C) 2006 - 2017 Daniel Glez-Peña and Florentino Fdez-Riverola
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Lesser Public License for more details.
*
* You should have received a copy of the GNU General Lesser Public
* License along with this program. If not, see
* .
* #L%
*/
/**
Display the contents of the current working directory.
The format is similar to the Unix ls -l
This is an example of a bsh command written in Java for speed.
@method void dir( [ String dirname ] )
*/
package bsh.commands;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import bsh.CallStack;
import bsh.Interpreter;
import bsh.StringUtil;
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.
*
* @param env
* the interpreter.
* @param callstack
* the callstack associated.
*/
public static void invoke(Interpreter env, CallStack callstack) {
String dir = ".";
invoke(env, callstack, dir);
}
/**
* Implement dir( String directory ) command.
*
* @param env
* the interpreter.
* @param callstack
* the callstack associated.
* @param dir
* the directory.
*/
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]);
StringBuffer sb = new StringBuffer();
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;
StringBuffer len = new StringBuffer();
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());
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy