用Java从文件中提取文本

时间:2013-01-26 06:15:53

标签: java swing

在JPanel ......

是否可以显示特定.txt文件中的某些文本行?

...示例

用户从几个下拉菜单中选择(我已将此部分放下)并单击提交,然后在右侧的JPanel中,我希望它从xxx.txt拉出(例如)第24 - 43行

我找不到办法让它完成,甚至可能吗?

3 个答案:

答案 0 :(得分:2)

虽然你所说的应该考虑其他方面,如果文件非常大,因此只是存储到任何集合只是为了通过数字访问它不会是一个很好的解决方案。 有各种API可以帮助您解决像RandomAccessFile这样的问题。 检查这些链接会有所帮助

Reading a specific line from a text file in Java

http://bitsofinfo.wordpress.com/2009/04/15/how-to-read-a-specific-line-from-a-very-large-file-in-java/

How to read a specific line using the specific line number from a file in Java?

答案 1 :(得分:2)

我想知道你是否过于复杂。您需要做的就是使用Scanner类来读取文件中的文本。然后正如Tim在他的评论中提到的那样,你可以将Scanner所接受的内容加载到列表结构中,然后从中打印出行(尽管如此,你甚至可以在没有列表存储结构的情况下执行它,尽管它确实可以更容易地操作它)。然后是的,将setText方法用于文本窗格,然后离开。

ListInterface可以替换为任何存储类型。蒂姆再次提出了一个同样有效的清单。你也可以只使用一个简单的数组,但是你可能无法编写自己的方法来与它进行良好的接口。

ListInterface<String> fileBag = new ListArray<>();
try
{
    /*
     * Open file fileName with Scanner
     * add all entries fron the file somefile.txt into fileBag
     * Close Scanner object
     */
    String fileName = "somefile.txt";
    File file = new File(fileName);
    Scanner scanner = new Scanner(file);
    String line;
    while (scanner.hasNextLine())
    {
        line = scanner.nextLine();
        fileBag.add(line);
    }
    scanner.close();
}
catch(FileNotFoundException e)
{
    System.out.println(e.getMessage());
    System.exit(0);
}

如果你不知道如何使用接口并在ListArray类中为它编写自己的方法,那么替换

ListInterface<String> fileBag = new ListArray<>();

ArrayList<String> fileArrayList = new ArrayList<>(1000);

其中1000应该是对阵列需要多大的最佳猜测,它不需要是正确的,如果它添加并且没有足够的空间,阵列将使其容量加倍,但这是一个O(n)操作,所以如果您对文件最多包含多少行很清楚,最好避免使用它。也替换:

fileBag.add(line);

with fileArrayList.add(line);

答案 2 :(得分:1)

看看

  • Basic IO。我建议您使用FileReader
  • 中包含的BufferedReader
  • How to use Lists这是一种显示数据行的方式......或者
  • How to Text Areas这是一种显示多行文字的方式。这可能更好,因为它支持文本选择和复制

小更新

很多将取决于文件的大小。一次读取文件并将其存储在java.util.List然后读取每个请求会更有效,但这取决于您可用的内存量