Gyakorlati alapok II.

Konzol a konzolban alapszintű parancsokkal


Ebben a rövid, de érdekes fejezetben néhány jellegzetes filekezelő függvényt a gyakorlatban is felhasználunk. Készítünk egy egyszerű virtuális konzolt (Command prompt): előre definiált parancsok fogják meghívni ezen filekezelő függvényeket, természetesen már külön metódusos elrendezésben.

 

Ezek a következők lesznek:

Nyilvánvalóan a parancsok (instruction) önmagukban nem elégségesek a műveletek elvégzéséhez, ehhez legtöbbször további 2 bemeneti adatra is szükség van:

Ezek standard sorrendje, amely gépeléskor kötelezően tartandó, a következő:
 

parancs szóköz név szóköz elérési út
 

Például a proba nevű könyvtár létrehozása a D: meghajtón:


mkdir proba D:/

 

A bekért bemeneti String-objektumot (args) a szóköz karakter mentén egy split() metódus bontja fel instruction-name-path String-komponensekre. Ezután a komponensek pontos megadása hívja meg a parancsok mögött lévő függvényeket:

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

A program a file-műveletekkel kapcsolatos legáltalánosabb működési és validálási szabályokat képes lekezelni (létrehozva, törölve, létezik, nem létezik, már létezik, stb.), de korántsincs minden egyes szabályra-helyzetre felkészítve!


Például az elérési út hiánya esetén a konzol a Java-programot futtató projekt munkakönyvtárában fog dolgozni, illetve egyéb hiányosságok vagy Bad command parancsot vagy nem tesztelt hibaüzeneteket fognak generálni. (Láthatóan a kivételkezelést sem kezeltük le -> throws IOException).


Ám ellenpéldaként említhetjük a deleteDirectory() metódust, amelyben a felhasznált delete() metódus alapértelmezésben nem fogja törölni a nem üres könyvtárakat, ezért a kötelező törlési rutinon felül egy olyan szubrutint is be kellett beilleszteni, amelyik képes erre.


Itt kell tehát megjegyeznünk, hogy már ez az 5 alapszintű parancs is olyan mennyiségű ellenőrzési-validálási munkát szabadított fel, amelyet a magam részéről csak alapszinten végeztem el, ám amelyet a Tisztelt Olvasó saját fejlődése céljából a jelen projektben bármikor tovább folytathat.

Nézzük meg a futtatható Java-kódot:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 



import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class Main {
static String args;
static String instruction;
static String path;
static String name;
static Scanner scanner = new Scanner(System.in);

public static void main(String[] arguments) throws IOException {
while(true) {
    path = "";
    instruction = "";
    name = "";

    System.out.println("Command prompt:");
    args = scanner.nextLine();

    int countGap = 0;
    for(int i = 0; i < args.length(); i++) {
        if(args.charAt(i) == ' ') {
            countGap++;
        }
    }

    if(countGap == 0) {
        if(args.equals("exit")) {
            exit();
        }
    else
        badCommand();
    continue;
}

    else if(countGap == 1) {
        String argsToken2[] = new String[2];
        argsToken2 = args.split(" ", 2);
        instruction = argsToken2[0];
        name = argsToken2[1];
        path = ".";
    }

    else if(countGap == 2) {
        String argsToken3[] = new String[3];
        argsToken3 = args.split(" ", 3);
        instruction = argsToken3[0];
        name = argsToken3[1];
        path = argsToken3[2];
    }

    if(instruction.equals("mkdir")) {
        makingDirectory();
        continue;
    }

    if(instruction.equals("del")) {
        deleteDirectory();
        continue;
    }

    if(instruction.equals("ls")) {
        listingShort();
        continue;
    }

    if(instruction.equals("lsf")) {
        listingFull();
        continue;
    }

    else
        badCommand();
    }
}

static void badCommand() {
    System.out.println("\nBad command\n");
}

static void exit() {
    System.out.println("\nViszlat!");
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        System.out.println("System failure!");
    }
    scanner.close();
    System.exit(0);
}

static void deleteDirectory() {
    File file = new File(path, name);
    if(!file.exists()){
        System.out.println("The deleting file/directory does not exist\n");
        return;
    }
    if(file.isDirectory()) {
        removeDirectory(file);
        System.out.println("The directory has been deleted\n");
        return;
    }
    else
    file.delete();
    System.out.println("The file has been deleted\n");
}

public static void removeDirectory(File dir) {
    if (dir.isDirectory()) {
        File[] files = dir.listFiles();
            if (files != null && files.length > 0) {
                for (File aFile : files) {
                    removeDirectory(aFile);
                }
            }
        dir.delete();
    } else {
    dir.delete();
    }
}

static void makingDirectory() {
    File file = new File(path, name);
    if(!file.exists()){
        boolean result = file.mkdir();
        if(result){
            System.out.println("Successfully created " + file.getPath()+ "\n");
        }
        else{
            System.out.println("Failed creating " + file.getPath() + "\n");
        }
        }else{
            System.out.println("Pathname already exists\n");
    }
}

static void listingShort() throws IOException {
    System.out.println();
    for(File f : new File(path).listFiles()) {
        System.out.println(f.getName());
    }
    System.out.println();
}

static void listingFull() throws IOException {
    System.out.println();
    for (File f : new File(path).listFiles()) {
        if(f.isFile()) {
            System.out.println("(File) " + f.getName() + " - with size of " + f.length() + " bytes");
        }else if(f.isDirectory()) {
    System.out.println("(Directory) " + f.getName() + " - with size of " + f.length() + " bytes");
    }
}
    System.out.println();
    }
}


Végeredmény:

Command prompt:
mkdir proba.txt D:/
Successfully created D:\proba.txt

Command prompt:
del proba.txt D:/
The directory has been deleted

Command prompt:
lsf Java D:/Java

(Directory) eclipse - with size of 4096 bytes
(Directory) Projects - with size of 8192 bytes

Command prompt:
ls Java D:/Java

eclipse
Projects

Command prompt:
ls

Bad command

Command prompt:
fg

Bad command

Command prompt:
exit

Viszlat!