-6

在 JPanel 中...

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

例子...

用户从几个下拉列表中选择(我已经把这部分放下了)并单击提交,然后在右侧的 JPanel 中,我希望它从 xxx.txt 中提取(例如)第 24 - 43 行

我没有找到完成这项工作的方法,这甚至可能吗?

4

3 回答 3

2

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

从Java中的文本文件中读取特定行

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

如何使用 Java 文件中的特定行号读取特定行?

于 2013-01-26T06:33:17.357 回答
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);
于 2013-01-26T06:35:59.510 回答
1

看一眼

  • 基本 IO。我建议你使用FileReader包裹在BufferedReader
  • 如何使用列表,这是一种显示数据行的方式......或者
  • How to Text Areas这是一种显示多行文本的方式。这可能更好,因为它支持文本选择和复制

小更新

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

于 2013-01-26T07:09:59.277 回答