Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Utilizar o BufferedReader para ler uma parte específica

Desenvolvi esse código para propósitos pessoais:

    public Boolean procurarProcessoLolRunning() throws IOException {

        long start_time = System.currentTimeMillis();
        long wait_time = 10000;
        long end_time = start_time + wait_time;
        boolean processoConfirmado = false;
        while (System.currentTimeMillis() < end_time && processoConfirmado == false) {

            try {
                String comando = System.getenv("windir")
                        + "\\system32\\tasklist.exe /nh /fi \"Imagename eq LeagueClientUxRender.exe\" /fi \"memusage gt 400000\"";
                Process p = Runtime.getRuntime().exec(comando);
                BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
                String process;
                ArrayList<String> procs = new ArrayList<String>();

                while ((process = input.readLine()) != null) {
                    procs.add(process);        
                    Boolean processFound = procs.stream().filter(row -> row.indexOf("LeagueClientUxRender.exe") > -1).count() > 0;
                    if (processFound == true) {
                        processoConfirmado = true;
                        //break;
                    }
                }
                input.close();
            } catch (Exception err) {
                err.printStackTrace();
            }
        }
        return processoConfirmado;
    }

E gostaria de criar uma variante a partir deste mesmo, porém n sei muito bem como fazer. Neste código que apresentei, ele é responsável p retornar true caso o processo LeagueClientUxRender.exe estiver rodando acima de 400M de memória. Porém eu pretendo criar um novo método que seria capaz de interpretar a memória que o processo está utilizando e salvar isso como uma int. Acredito q possa estar relacionado com .read(charAt[]) mas n tenho certeza. No momento quando mando o console printar o "process" a saída é:

"LeagueClientUxRender.exe 11604 Console 1 256.348 K"

4 respostas

Opa, o método read te retorna o array de chars preenchido em função do range que você passou como parâmetro. De todo jeito, eu acho que não entendi direito o que você quer mesmo :(.

" Porém eu pretendo criar um novo método que seria capaz de interpretar a memória que o processo está utilizando e salvar isso como uma int "

Pode dar um exemplo?

Boa noite, Alberto. Como eu disse, quando utilizo o modo "process = input.readLine()", a saída q eu obtenho de process seria:

"LeagueClientUxRender.exe 11604 Console 1 256.348 K".

Q é na realidade a leitura do nome do processo, a identidade dele, e o consumo de memória que ele está utilizando. Eu gostaria de criar um novo método que me retorna como resposta apenas o "1 256.348 K", se fosse neste caso.

A idéia do projeto, é criar uma situação q só seja executada quando o consumo de memória utilizado pelo processo: LeagueClientUxRender.exe, ultrapasse determinado valor. Até este ponto é ok, pq eu consigo realizar q a tarefa apareça caso ela esteja dentro destes parâmetros q acabo de mencionar. Porém, para adicionar mais complexidade, eu gostaria de fazer o programa interpretar a quantidade de memória utilizada no momento.

solução!

Veja bem se entendi, vc quer pegar apenas o valor 1.256.348 de uma string chamada processo, conforme a especificação acima. vc pode quebrar a string por um deterninado caractere, no caso o espaço " ", convertendo em um array

String array[] = new String[3]; array = process.split(" ");

depois vc pode pegar o penúltimo elemento deste array

int tamanhoDoArray = array.lenght()

String penultimo = array[tamanhoDoArray - 2)

int valor = Integer.parserInt(penultimo)

Luiz Carlos, era exatamente isso q eu queria, tive apenas q fazer algumas alterações más a idéia era essa mesmo. Muito obrigado pela atenção, me desculpe se n fui muito claro anteriormente. Grato a todos.