有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

swing使用Java从文件中提取文本

在一个JPanel中

是否可以显示特定区域中的某些文本行。txt文件

例如

用户从几个下拉列表中选择(我已经下载了这个部分)并单击submit,然后在右侧的JPanel中,我希望它从xxx中拉出(例如)第24-43行。文本

我找不到办法来完成这件事,有可能吗


共 (3) 个答案

  1. # 1 楼答案

    虽然你所说的应该考虑其他方面,比如如果文件非常大,因此简单地存储到任何集合中,仅仅用数字来处理它就不是一个好的解决方案。 有各种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?

  2. # 2 楼答案

    看看

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

    小更新

    很大程度上取决于文件的大小。一次读取文件并将其存储在java.util.List中,然后在每次请求时读取,效率会更高,但这取决于可用内存的多少

  3. # 3 楼答案

    我想知道你是不是把这件事搞得太复杂了。您只需使用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);