Java komenda exec i linux

0

Witam chciałem napisać sobie programik w javie który sprawdzałby czy dana czcionka jest dostępna w systemie (linux), używając do tego shella : ogólnie w konsoli działa mi taka funkcja :
identify -list font | grep -i 'Font: Times-Bold' -w

Napisałem sobie więc funkcyjke :

public abstract class SystemReader{
	
	public static final void checkFontExist(String name){
		String command = "identify -list font | grep -i -w \'Font: "  + name + "\'";
		Process p  =Runtime.getRuntime().exec(command);

		String lines = "";
		String resoults ="";
		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(p.getInputStream()));
		while((line  buferedReader.readLine())!=null){
			resoult += line + "\n";
		}

		System.out.println("RESPONSE: " + resoult);
		bufferreader.close();
	}

}
 

Teoretycznie działa ale nie tak jak powinno wypisują mi się wszystkie dostępne czcionki :/ tak jakby polecenie grep nie bylo wykonywane :/

próbowałem użyć innej wersji a mianowicie :

String command = {"identify -list font", "grep -i -w \'Font: " + fontName + "\'"}
ale tez nie dziala, mam błąd :

 Exception in thread "main" java.io.IOException: Cannot run program "identify -list font ": java.io.IOException: error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
	at java.lang.Runtime.exec(Runtime.java:593)
	at java.lang.Runtime.exec(Runtime.java:466)

Ogólnie jestem zielony jak powinna wyglądać konstrukcja takiego polecenia , jeśli ktoś wie jak takie rzeczy się robi to będę wdzięczny :)

0

Proponuję inną drogę:

String[] fontList=GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
1

identify -list font | grep -i 'Font: Times-Bold' -w

Tutaj uzywasz pipow, czyli funkcjonalnosci shella, to nie zadziala w ten sposob. Musisz albo sam zaimplementowac 'pipy', wywolujac identify, pobrac dane za pomoca input streama, nastepnie gdzies zapisac np. w pliku tymczasowym, i wywolac grepa z tym plikiem (to tylko jedna z opcji, najlatwiejsza).

Wzglednie wywolaj:
/bin/bash -c "identify -list font | grep -i 'Font: Times-Bold' -w"

czyli proces ktory startujesz to shell, ktory pozzniej sam zintepretuje identify i pipa itp.

0

Dzięki mistrzu tak jak mówiłeś :
String command = {"/bin/bash" , "-c" , "identify -list font | grep -i 'Font: Times-Bold' -w"}

Działa tak jak chciałem dziękuję

1 użytkowników online, w tym zalogowanych: 0, gości: 1