【问题标题】:pulling text from file with Java [closed]使用Java从文件中提取文本[关闭]
【发布时间】:2013-01-10 03:52:55
【问题描述】:

在 JPanel 中...

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

示例...

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

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

【问题讨论】:

  • 是的,很有可能。将文件加载到某种换行符分隔的数据结构中(例如List),然后从数据结构中选择所需的范围(例如myList.subList(24,43),然后(如果您愿意,可以折叠文本)添加文本到标签或文本窗格或其他东西并将其粘贴在面板中。
  • “有可能吗?” 哪一部分?从文件中读取行?从那些阅读中选择特定的行?显示它们?问这些较小的任务是否可以实现(当然可以)似乎是一个愚蠢的问题,而只是希望有人为您编写代码。
  • 您真正遇到问题的步骤是什么?将文件名从 JComboBox 传递给扫描仪?使用扫描仪从文件中读取行?存储扫描仪中的行以便于逐行访问?使用 setText 在字段中设置文本?通过使用与 JComboBox 配对的 ActionListener 来获取文本窗格以更新新文本?你需要弄清楚是哪一步让你失望了。
  • 我不是在寻找代码,只是在寻找方向。我把这个项目作为一个学习练习。我刚刚开始挥杆,所以我什至不知道从哪里开始。

标签: java swing


【解决方案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?

【讨论】:

  • 这实际上正是我想要的。我不是在寻找答案,而是在寻找帮助我学习的指南。我想我应该更好地表达我的问题。
  • 嘿,很高兴知道它有帮助。一句忠告,在你提出问题之前,点击好的搜索引擎,你会找到答案。 :)
  • 我尝试搜索但找不到我要找的东西。我一直在寻找如何导入图像和 html 标签之类的东西(偶然发现了导入图像的东西,这实际上很有帮助,因为我需要将公司徽标放在应用程序中)
【解决方案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);

【讨论】:

  • 这太棒了。我明天要试一试,然后告诉你效果如何。非常感谢您的帮助
  • @WizardKnight 请记住,ListInterface 和 ArrayList 类是您必须自己编写的类。如果您对此感到不舒服(参加数据结构课程),请参阅我上面的建议。
  • 我对 ArrayLists 没有任何问题,现在将在 ListInterface 上阅读。非常感谢
【解决方案3】:

看看

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

小更新

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

【讨论】:

  • 是的,考虑到他说他正在用它做什么(只是写出整行)BufferedReader 会是一个更好的选择,尽管效率可能比 Scanner 可以忽略不计。
  • @Sage88 我对 Readers 的经验比对 Scanner 的经验要多:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多