Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto
Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto
Samsung rinnova la serie pieghevole di punta con Galaxy Z Fold8 Ultra: pannello interno da 8 pollici quasi senza piega, cerniera Flex Titanium, Snapdragon 8 Elite Gen 5 for Galaxy e batteria finalmente da 5.000 mAh. Prezzo italiano da 2.299 a 2.899 euro. Tra colorimetro, benchmark reali e giorni di uso quotidiano, ecco dove questo pieghevole convince e dove il nome Ultra fatica ancora a trovare piena giustificazione
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing"
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing"
La nuova Insta360 X6 introduce sensori Sony da 1/1.1" e un SoC Triple AI a 4nm. Analizziamo le riprese 8K, il primo Dolby Vision nativo a 10-bit nel settore sferico e l'innovativo flusso di lavoro diretto sulla futura versione 22 di DaVinci Resolve.
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli
Dopo due settimane trascorse al volante della Dacia Spring 2026 possiamo raccontarvi tutto, dalle novità di motore e batteria, fino ai consumi in tutti le situazioni, compresa l'autonomia reale ad alta velocità
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-12-2006, 15:16   #1
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 7237
[Java] Eseguire comandi da shell

Salve, ho bisogno di eseguire da un programma Java un comando da console. Ad esempio quello che fa venire la versione della jdk ovvero java -version. A tal proposito ho scritto:

Codice:
package comandi;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.PrintStream;

public class Comandi {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Process cmd;
		String[] a= {"/bin/sh","java","-version"};
		try{
		cmd = Runtime.getRuntime().exec(a);
		PrintStream cmdin = new PrintStream(new BufferedOutputStream(
		cmd.getOutputStream()));
        System.out.println(cmd.toString());
		DataInputStream cmdout = new DataInputStream(new BufferedInputStream(
		cmd.getInputStream()));
		}
		catch (IOException e)
		{
			
		
		}
	}

}
Ma come output ottengo:

java.lang.UNIXProcess@10b62c9

Cosa vuol dire? Probabilmente sbaglio a passare i comandi in quel modo. In realtà il mio comando deve poi richiamare un programma, ma adesso per imparare gli sto mandando comandi di shell semplici. Grazie.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 06-12-2006, 16:31   #2
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Prova a stampare cmdin che è il PrintStream.

ciao
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 06-12-2006, 19:54   #3
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 7237
Quote:
Originariamente inviato da VICIUS
Prova a stampare cmdin che è il PrintStream.

ciao
Già provato,cambia solo il messaggio di output :

java.io.PrintStream@10b62c9
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 06-12-2006, 20:15   #4
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Guardando su qualche esempio online dice di ricordarsi di chiudere lo stream con la close(). Purtroppo non ho java sotto mano e più di cosi non posso aiutarti

ciao
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 06-12-2006, 20:51   #5
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 7237
Quote:
Originariamente inviato da VICIUS
Guardando su qualche esempio online dice di ricordarsi di chiudere lo stream con la close(). Purtroppo non ho java sotto mano e più di cosi non posso aiutarti

ciao

Allora, ci sono quasi.
Il comando che inserisco è questo:

String[] a= {"sh","-c","java","-version"};

Però non mi prende l'argomento "-version" , mi esegue il comando java e mi dà tutta la lista dei possibili argomenti.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2006, 09:07   #6
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Come comando basta una stringa:
String a = "java -version";

Poi per leggere lo stdout - similmente per stderr - devi fare:
BufferedReader brSTDOUT = new BufferedReader(new InputStreamReader(p.getInputStream()));
(non e' necessario il wrap Buffered, comunque...)

Per stamparlo:

Codice:
String s;
        while(true) {
            s = brSTDOUT.readLine();
            if(s == null)
                break;
            System.out.println(s);
        }
Se vuoi anche il codice di uscita:

System.out.println("\n\nCodice di uscita: " + p.waitFor());
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2006, 12:49   #7
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Ecco una possibile soluzione per "catturare" l'output del processo avviato (nell'esempio java -version su Windows):

Codice:
import java.io.*;
import java.util.regex.*;

public class Prova
{
    public static void main (String[] args)
    {
        try
        {
            Runtime rt = Runtime.getRuntime ();
            Process proc = rt.exec (new String[] { "cmd", "/C", "java", "-version" });

            InputStreamGrabber isgOut = new InputStreamGrabber (proc.getInputStream ());
            InputStreamGrabber isgErr = new InputStreamGrabber (proc.getErrorStream ());

            int exitVal = proc.waitFor ();

            Pattern pattern = Pattern.compile ("java version \"(.*)\"", Pattern.DOTALL);
            Matcher matcher = pattern.matcher (isgErr.getString ());

            if (matcher.find ())
                System.out.println ("Versione di Java: " + matcher.group (1));
        }
        catch (Exception e)
        {
            System.out.println (e);
        }
    }
}


class InputStreamGrabber implements Runnable
{
    private InputStream is;
    private StringBuffer sb;

    public InputStreamGrabber (InputStream is)
    {
        this.is = is;
        sb = new StringBuffer ();

        new Thread (this).start ();
    }

    public void run ()
    {
        try
        {
            InputStreamReader isr = new InputStreamReader (is);

            char[] buf = new char [256];
            int len;

            while ((len = isr.read (buf)) != -1)
                sb.append (buf, 0, len);
        }
        catch (Exception e)
        {
            System.out.println (e);
        }
        finally
        {
            try {
                is.close ();
            } catch (Exception e) { }
        }
    }

    public String getString ()
    {
        return sb.toString ();
    }
}
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2006, 12:52   #8
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Quote:
Originariamente inviato da lovaz
...
(non e' necessario il wrap Buffered, comunque...)
...
Anzi si', se vuoi usare readLine().
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2006, 13:00   #9
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 7237
Grazie delle risposte. Ho risolto.
Unrue è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto Recensione Samsung Galaxy Z Fold8 Ultra: il pieg...
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing" Insta360 X6: Dolby Vision, 8K e montaggio "...
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli Due settimane con Dacia Spring 2026: novit&agrav...
AORUS GeForce RTX 5080 INFINITY WOOD 16G: una scheda video diversa dalle altre AORUS GeForce RTX 5080 INFINITY WOOD 16G: una sc...
Hyundai Ioniq 9: dopo due settimane di test non avremmo voluto restituirla Hyundai Ioniq 9: dopo due settimane di test non ...
Vogliono costruire un monumento per Elon...
Ring Intercom Audio crolla a 39,99€ su A...
La Francia blocca il divieto dei social ...
Trump citato in giudizio: chiesto lo sto...
PEC obbligatoria per revisione e passagg...
Il ripulitore di watermark Claude da 4.5...
Xiaomi 17 Ultra scambia il Sole per la L...
È arrivata la migliore e-bike Eng...
Apple Mac mini M4, ecco perché conviene ...
Robot aspirapolvere in offerta su Amazon...
Il nuovo pick-up elettrico di Ford &egra...
Google Pixel 11 arriva su Amazon: preord...
Mega sconti su attrezzi a batteria e rob...
Google Search dà per morto Sam Al...
Il noleggio delle GPU NVIDIA si quota in...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 22:02.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v