¡Estoy buscando urgentemente dos preguntas difíciles sobre programación Java! ! !
Si se utiliza el mapeo en la primera pregunta, el programa será bastante simple y fácil de expandir.
El programa cercano a los requisitos de la pregunta es el siguiente:
import java.lang.reflect.*;
import java.io.*; p>
importar java.util.*;
clase MiniDOS {
public static void main(String[] args) {
nuevo MiniDOS( ).run( );
}
public void run() {
Escáner scn = new Scanner(System.in);
mientras (verdadero) {
String Prompt = "[ " + cwd + " ] >> ";
System.out.print(prompt);
Línea de cadena = scn.nextLine().trim();
if (line.length() > 0 && ! line.equals(prompt.trim()))
processInput(line );
}
}
private void ProcessInput(String input) {
String[] tokens = entrada .split(" \\s+", 2);
String cmd = tokens[0].toLowerCase();
prueba {
if (! isSupportedCommand(cmd) )
lanzar nueva excepción("'" + cmd + "' es un comando no válido");
Método método = SupportedCommands.class.getMethod(
cmd, tokens.length == 2 ? new Class[]{File.class} : null);
Object[] argumentsForMethodInvocation = null;
if (tokens) .length == 2) {
Archivo f = nuevo Archivo(tokens[1]);
f = f.isAbsolute() ? getPath()) ;
si (! f.exists())
lanzar nueva IOException("'" + f + "' no existe");
argumentosForMethodInvocation = nuevo Objeto[]{f.getCanonicalFile()};
}
method.invoke(nuevos SupportedCommands(), argumentosForMethodInvocation);
}
catch (NoSuchMethodException e) {
printError("número incorrecto de argumento para '" + cmd + "'");
}
catch (Excepción e) {
Lanzable c
ause = e.getCause(); // Para hacer frente a InvocationTargetException
printError(cause != null ? cause.getMessage() : e.getMessage());
} p>
}
private void printError(mensaje de cadena) {
System.err.println( "Error: " + mensaje);
}
Archivo privado cwd = new File(System.getProperty("user.dir"));// directorio de trabajo
privado booleano isSupportedCommand(String cmd) { p>
return Arrays.toString(SupportedCommands.class.getMethods())
.contains("SupportedCommands." + cmd + "(");
} p>
/* * Todos los métodos definidos en la clase SupportedCommands son comandos regulares admitidos por el programa */
clase privada SupportedCommands {
public void dir() { p>
for (Archivo f: cwd.listFiles())
System.out.printf( "%s %9s %9s %s\n",
nuevo Fecha( f.lastModified()),
f.isDirectory() ? "
f.isDirectory() "" : f.length () ,
f.getName()
);
}
public void cd(Archivo) lanza IOException {
if (! file.isDirectory())
lanzar nueva IOException("'" + file + "' no es un directorio");
cwd = archivo ;
}
public void del(Archivo de archivo) lanza IOException {
if (! file.delete())
throw new IOException("error de eliminación");
}
tipo de vacío público (archivo) lanza IOException {
for (Scanner fs = new Scanner (archivo ); fs.hasNextLine(); )
System.out.println(fs.nextLine());
}
salida vacía pública ( ) {
System.exit(0);
}
}
}