从特定行开始读取文件

我有一个文件similaire:…

The hotspot server JVM has specific code-path optimizations # which yield an approximate 10% gain over the client version. export CATALINA_OPTS="$CATALINA_OPTS -server" #############HDK1001############# # Disable remote (distributed) garbage collection by Java clients # and remove ability for applications to call explicit GC collection export CATALINA_OPTS="$CATALINA_OPTS -XX:+DisableExplicitGC" # Check for application specific parameters at startup if [ -r "$CATALINA_BASE/bin/appenv.sh" ]; then . "$CATALINA_BASE/bin/appenv.sh" fi #############HDK7564############# # Disable remote (distributed) garbage collection by Java clients # and remove ability for applications to call explicit GC collection export CATALINA_OPTS="$CATALINA_OPTS -XX:+DisableExplicitGC" 

我想从存在单词“HDK1001”的行开始阅读并结束世界“HDK7564”

我试过这个代码,但我无法做到这个限制

 public static HashMap getEnvVariables(String scriptFile,String config) { HashMap vars = new HashMap(); try { FileInputStream fstream = new FileInputStream(scriptFile); BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); String strLine; String var= "HDK1001"; while ((strLine = br.readLine()) != null ) { if (strLine.startsWith("export") && !strLine.contains("$")) { strLine = strLine.substring(7); Scanner scanner = new Scanner(strLine); scanner.useDelimiter("="); if (scanner.hasNext()) { String name = scanner.next(); String value = scanner.next(); System.out.println(name+"="+value); vars.put(name, value); } } 

请帮帮我

试试这段代码。

 public static HashMap getEnvVariables(String scriptFile, String config) { HashMap vars = new HashMap(); BufferedReader br = null; try { FileInputStream fstream = new FileInputStream(scriptFile); br = new BufferedReader(new InputStreamReader(fstream)); String strLine = null; String stopvar = "HDK7564"; String startvar = "HDK1001"; String keyword = "export"; do { if (strLine != null && strLine.contains(startvar)) { if (strLine.contains(stopvar)) { return vars; } while (strLine != null && !strLine.contains(stopvar)) { strLine = br.readLine(); if (strLine.startsWith(keyword)) { strLine = strLine.substring(keyword.length()) .trim(); String[] split = strLine.split("="); String name = split[0]; String value = split[1]; System.out.println(name + "=" + value); vars.put(name, value); } } } } while ((strLine = br.readLine()) != null); } catch (Exception e) { e.printStackTrace(); } return vars; } 

您的示例代码相当远,我不打算重写您的所有代码,但我会给您一些指示。 你已经在做:

 if (strLine.startsWith("export") && !strLine.contains("$")) 

这是你的条件,应该测试“HDK1001”字符串而不是它现在正在做的任何事情。 我不确定你为什么要检查“导出”这个词,因为它似乎对你的程序无关紧要。

没有办法只是神奇地开始和结束文件中的特定单词,你必须从头开始,逐行检查所有这些,直到找到你想要的第一行和最后一行。 找到第一行后,您可以继续阅读,直到达到所需的结束线然后挽救。

这是伪代码,遵循您希望能够完成此任务的逻辑类型。

 flag = false inside a loop { read in a line if( line != #############HDK1001############# && flag == false){ //check to see if you found your starting place nothing useful here. lets go around the loop and try again else // if i found it, set a flag to true flag = true; if( flag == true) // am i after my starting place but before my end place? { if( line == #############HDK1001#############) do nothing and go back through the loop, this line is not useful to us else if( line == #############HDK7564#############) //did i find my end place? flag = false // yes i did, so lets not be able to assign stuff any more else // im not at the start, im not at the end. I must be inbetwee. lets read the data and assign it. read in the lines and assign it to variables that you want }