使用Groovy搜索文件并获取字符串下面的内容

时间:2014-07-31 21:20:11

标签: string groovy

我试图使用Groovy打开一个文件来搜索特定的子字符串,然后抓住一个在第一个字符串下面出现的不同子字符串。

例如,我搜索的子字符串是"充电器已启用。检查充电参数......" 如果找到了,我想得到一个在此之后发生的特定字符串。

最好的方法是将文件读入内存并搜索第一个字符串的索引吗?

1 个答案:

答案 0 :(得分:0)

// With Java
import java.io.File;  
import java.io.BufferedReader;
import java.io.FileReader;

def localDirectory = "";
def fileName = "";
def searchKey = "Charger is enabled. Checking charge parameters";
def searchKey2 = "";
def errorMessage = "";
FileReader fr;
BufferedReader br;

try
{  
    File f1 = new File(localDirectory+"/"+fileName);
    fr = new FileReader(f1);
    br = new BufferedReader(fr);
    def keyFound = false;

    // Go through line by line.
    def line;
    while ((line = br.readLine()) != null)
    {
        // If first string is found, process the second string.
        if(line.contains(searchKey))
        {
            while ((line = br.readLine()) != null)
            {
                // Do something with the second string.
                if(line.contains(searchKey2))
                {
                    keyFound=true;
                    break;
                }   
            }          
        }
        if(keyFound)
        {
            break;
        }
    }
}
catch (Exception e)
{
    errorMessage += "\nUnexpected Exception: " + e.getMessage();

    for (trace in e.getStackTrace())
    {
        errorMessage += "\n\t" + trace;
    }
}
finally
{
    fr?.close();
    br?.close();
}

// With Groovy
def localDirectory = "";
def fileName = "";
def searchKey = "Charger is enabled. Checking charge parameters";
def searchKey2 = "";
def errorMessage = "";

try
{  
    File f1 = new File(localDirectory+"/"+fileName);
    def keyFound = false;

    // Go through line by line.
    def line;
    f1.withReader
    {
        reader ->
            while((line = reader.readLine()) != null)
            {       
                // If first string is found, process the second string.
                if(line.contains(searchKey))
                {
                    while((line = reader.readLine()) != null)
                    {
                        // Do something with the second string.
                        if(line.contains(searchKey2))
                        {
                          keyFound=true;
                          break;
                        }                 
                    }               
                }
                if(keyFound)
                {
                    break;
                }
            }
    }       
}
catch (Exception e)
{
    errorMessage += "\nUnexpected Exception: " + e.getMessage();

    for (trace in e.getStackTrace())
    {
        errorMessage += "\n\t" + trace;
    }
}