2016-10-17 13 views
0

私のPC上で実行されているすべてのプロセスに関する情報を.txtファイルにダンプします。これを行うには、私のjavaアプリケーションからhandle.exeを実行します。ファイルは、この形式では、すべての実行中のプロセスが含まれていますjavaのtxtファイルから特定の行を取得する方法

RuntimeBroker.exe pid: 4756 
4: Key   HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image 
8: Event 
    10: WaitCompletionPacket 
    1C: IRTimer  
    20: WaitCompletionPacket 
    24: IRTimer  
    28: File   \Device\CNG 

-- 

SearchIndexer.exe pid: 5616 
4: Event   
8: WaitCompletionPacket 
C: IoCompletion 
1C: IRTimer 
20: File   \Device\0000007s 
22: Directory 

私は\デバイスを、私は」文字列の検索、ファイルをループしていた場合、すなわち、与えられたデバイスを使用しているプロセスの名前を取得する必要があります\ 0000007s "、私はプロセスの名前と上記の数行のプロセスIDを取得する必要があります。誰が私がこれをどうやってすることができるか知っていますか?プロセスは、ファイル内にダッシュの線で区切られています。ファイルが大量であることに注意してください。これは単なる例です。

+0

Javaにする必要はありますか? awkはこのようなことのために作られたものです。 – cxw

+0

[Javaのファイルから特定の行番号を使用して特定の行を読み取る方法?](http://stackoverflow.com/questions/2312756/how-to-read-a-specific-line-using-特定の行番号のJavaから) – nhouser9

+0

それはJavaである必要があります。Javaアプリケーションです。 – Tofetopo

答えて

1

List<String>には、プロセスの各行(Scannerを使用)を読みます。その後、希望するStringList<String>で検索し、それがある場合は処理してください。ここではいくつかの擬似コードは次のとおりです。

Scanner scanner = new Scanner("path/to/file.txt"); 
List<String> stringList; 
while(scanner.hasNextLine()) { 
    String nextLine = scanner.nextLine(); 

    if(nextLine.equals("--") { 
    for(String line : stringList) { 
     if(line.contains("\Device\0000007s") { 
     // Do your processsing here 
     } 
    } 

    stringList.clear(); 
    } 

    else { 
    stringList.add(nextLine); 
    } 

} 

これは単なる擬似コード、最後のプロセスのエッジケースを処理しないと、おそらくコンパイルされません。私はあなたにナチュラルな構文を残します。

これを行うにはループが少なくても最適な方法があります。しかし、このような単純なことについては、私は最適化されたものへの明確なアプローチを好む。

+0

ニースのアダム・ロジーニ、これを試してみましょう。私はこれを必要としているので、年をとってループを作り、文字列を見つけるのはかなり早いプロセスです。乾杯! – Tofetopo

関連する問題