我有一个GUI程序,我用它来导航文本文件。它不是太复杂,只是能够浏览文件并向其添加新信息。但是,我还希望能够识别文本文件中的第一行以及最后一行。基本上,如果我有一个看起来像这样的文本文件:
我希望,当按下第一个按钮时 - 加利福尼亚文本出现,识别文本中的第一行。但我只想要加利福尼亚展示,而不是第一行的其他信息。我希望以同样的方式为最后一行做到这一点。
我正在使用带有StringTokenizer的FileReader和FileBuffer。有没有办法只调用第一行的第一个标记和最后一行的第一个标记?谢谢你的帮助!
答案 0 :(得分:3)
获取你可以做的行的第一个标记
String line = "California, West, 1981, 115, 25.99"
String firstToken = line.split(",")[0]
获取最后一行我将迭代整个文件并将其存储在List中并获取最后一个元素,如:
String line ="";
List<String> list = new ArrayList<String>();
while((line = fileReader.readLine())!= null){
list.add(line)
}
list.get(0) // first line
list.get(list.size()-1) // last line
答案 1 :(得分:1)
提供的答案应该适用于大多数(绝大多数)情况。但对于真正庞大的输入文件,使用RandomAccessFile
(RAF)采用不同的方法可能是有意义的。
使用RAF,读取第一个字节,直到命中换行符号(第一行),然后从RAF末尾向后搜索以找到最后一个新行,并从那里读取直到结束(对于最后一行)。
如果线条是固定列宽(FCW),则更容易,但此数据为CSV。对于FCW,您可以计算,知道文件大小和线宽(长度),最后一行将开始,并直接寻找到那一点。
答案 2 :(得分:0)
如何找出所需字符串的示例
使用流阅读器阅读文件
streamreader sr=new streamreader("Your.txt");
while(sr.peek()>=0)
{
string strLine=sr.readLine();
if(strline.startswith("California"))
{
//Dispaly it
}
if(strline.startswith("NewYork"))
{
//Display it
}
}
答案 3 :(得分:0)
有没有办法从文本文件中读取它?
如果插入的行无关紧要,您可以阅读第一行并扫描到最后一行,而无需累积集合。
import java.io.BufferedReader;
import java.io.FileReader;
/** @see http://stackoverflow.com/questions/5614004 */
public class FirstLastTest {
private static String first, last, line;
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new FileReader(args[0]));
first = in.readLine();
while ((line = in.readLine()) != null) {
if (line != null) {
last = line;
}
}
System.out.println(first + "\n" + last);
}
}
答案 4 :(得分:0)
这是一个非常古老的问题,但现在我们有一个简单的方法来做到这一点,我没有找到任何例子。我给出一个新的答案: 我使用的是 Java 11,但可能在 Java 8 中可用,必须检查。
Long lines = Files.lines(Paths.get(file)).count();
String first = Files.lines(Paths.get(file)).findFirst().get();
String last = Files.lines(Paths.get(file)).skip(lines - 1).findFirst().get();