2012-12-12 37 views
3

我正在编写一个编译器程序来读取文本文件。文本文件中的一些命令会告诉我跳回到文本文件中的某一行并从那里读取。就像事情一样,这段代码一次只读一行,直到文档结束。无论如何,有一个解析器跳回或转发到文本文件中的某一行?举例来说,我现在在第8行,并且指令要返回并阅读第4行?如何在解析java中的文本文件时在行之间跳过

这是我解析文件的代码。

try { 
    FileInputStream fstream = new FileInputStream("compilers.txt"); 
    BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 
    String strLine; 

    while ((strLine = br.readLine()) != null && checker == false) { 
     // rest of code in here 
    } 
    in.close(); 
} 
+4

你为什么不读所有的行,将它们保存在一个列表中(每行一个条目)并且做你的工作? – jlordo

回答

1

你可以用Map

HashMap<Integer, String> 

主要做,这是你的行号和值是您的线路。因此,您可以在需要时逐行获取。

Map<Integer, String> lineMap = new HashMap<Integer, String>(); 
int i = 1; 
while ((strLine = br.readLine()) != null && !checker) { 
    lineMap.put(i, strLine); 
    // do what you want 
    // if you are in line 8 (i=8) 
    // get my line 4 (lineMap.get(4)) 
    i++; 
} 
+0

嘿,非常感谢,这工作完美!你是一个拯救生命的人! –

+0

完全错过使用hashMap! ArayList将是正确的集合 – AlexWien

2

还有就是流mark()reset()功能, 但这些可以通过BufferedStream■当失败。更好的是你将 整个文件读入一个ArrayList,每行一个条目。

为ArrayList的

例子:

List<String> lines = new ArrayList<String>(); 
while ((strLine = br.readLine()) != null) { 
    lines.add(strLine); 
} 

// later get line by: 
// first line has index 0  
String line = lines.get(8); 
+0

感谢您在回答时间,我决定去hashmap虽然:) –

+0

你不会在该场景中使用HashMap,ArrayList是去。散列表是用于像名称等的键,但对于从0到N-1的有序序列形式也是如此。 – AlexWien

相关问题