Red de conocimiento informático - Conocimiento del nombre de dominio - ¡Estoy buscando urgentemente dos preguntas difíciles sobre programación Java! ! !

¡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.*;

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());

}

}

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) {

return Arrays.toString(SupportedCommands.class.getMethods())

.contains("SupportedCommands." + cmd + "(");

}

/* * Todos los métodos definidos en la clase SupportedCommands son comandos regulares admitidos por el programa */

clase privada SupportedCommands {

public void dir() {

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);

}

}

}