Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Eseguire un programa e leggere l'output

    Salve a tutti, come da titolo sto cercando di leggere l'output di un programma, la cosa mi riesci fin tanto che l'output è corto. Ho scritto questa classe

    codice:
    public class AdbManager{
        private String _adbPath;
        Process _p=null;
            
        public AdbManager(String adbPath)
        {
            _adbPath=adbPath;
        }
        
        public void start(String arg)
        {
            try
            {
                _p = Runtime.getRuntime().exec(_adbPath + " " + arg);
                            
            }
            catch (IOException e)
            {
                System.out.println("ERROR: I can't start adb\n"+e.toString());
                System.exit(-1);
            }
    
    
        }
        
        public String getOutput()
        {
            BufferedReader input = new BufferedReader(new InputStreamReader(_p.getInputStream()));
            StringBuilder stroutput = new StringBuilder();
            int c;
            try 
            {
                while((c=input.read()) >= 0) 
                {
                    stroutput.append((char)c);
                }
            }
            catch (IOException e) 
            {
                System.out.println("ERROR: I can't get adb output\n"+e.toString());
                System.exit(-1);
            }
            
            return stroutput.toString();
        }
    }
    Chiamo start passando una stringa con gli argomenti da passare all'eseguibile
    poi chiamo la funzione getOutput per leggere cosa ha restituito l'eseguibile.

    Se l'output è di poche righe riesco a leggerlo tranquillamente, se invece è più lungo input.read() torna -1 alla prima chiamata e non legge niente.
    Qualcuno saprebbe aiutarmi? Grazie mille in anticipo

    Andrea993

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Perchè costruisci un BufferedReader per poi andare a leggere carattere per carattere (cosa che può fare tranquillamente l'InputStream originale senza scomodare i sistemi di bufferizzazione)?

    Prova così:


    codice:
    String line = null;
    try {
       while((line = input.readLine()) != null) {
          stroutput.append( line ).append( System.getProperty("line.separator") );
       }
    } catch (Exception e) {
       ...
    }

    PS: l'uso in Java di nomenclatura C-style proprio non si può vedere...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.