【发布时间】:2020-03-31 21:10:24
【问题描述】:
下面显示的代码应该从文本文件中单独读取每一行,将当前行存储到字符串 fileLine 中,然后打印出 fileLine 的内容
当文本文件仅包含 一个 行时,代码按所述执行打印该行。但是,当文本文件有 超过 一行时,'while(sc.hasNextLine())' 语句将被完全跳过,这让我摸不着头脑使用此代码的类似版本从同一项目中的其他文本文件中读取。
代码
private File stockFile = new File(stockFilePath);
public void fetchCurrentStock() throws FileNotFoundException {
Scanner sc = new Scanner(stockFile);
String fileLine = "";
//Name\tPrice\tDescription\tSupplierName\tItemImagePath\tItem_ID\tQuantity
while(sc.hasNextLine()){
fileLine = sc.nextLine();
System.out.println(fileLine);
}
}
文本文件内容
Samsung Galaxy S20+ 999 Samsung's latest & greatest PhonesHub null 001 20
Samsung Galaxy A10 130 Capture clear photos, in any light. Watch, play and browse more on the 6.2 inch HD+ display. PhonesHub null 002 25
Samsung Galaxy S10 750 Last years base flagship model, great power at a respectable price. PhonesHub null 003 30
Huawei P30 380 Take your photography to the next level with the P30’s triple camera & 6.1 inch display. PhonesHub null 004 15
更新:似乎当文本文件中每行的文本较少时,Scanner.nextLine() 会按预期运行。也许在这里使用 Scanner 类不是一个选项?
【问题讨论】:
-
不相关,但使用String#split可能会更容易
-
这几乎不是MCVE:几乎所有发布的代码,尤其是“解析”代码,都与您的扫描仪没有找到所有行的原因没有任何关系。即使是示例输入文件也不需要所有内容来创建 MCVE。请将您的代码和数据编辑到演示问题所需的绝对最小值。
-
无法重现。从version 5(2020-03-31 22:22:12Z)复制的代码和文本文件问题。程序按预期打印了 4 行文本。 --- 如果你的程序没有打印任何东西,你还记得实际调用方法
fetchCurrentStock()吗? -
哦,我想我知道发生了什么事。您是否在 Eclipse 中运行该程序?程序输出显示的 Eclipse
Console视图在显示很长的行时出现问题。您的问题不是您的程序,而是 Eclipse。 尝试从命令提示符运行您的程序。 参见例如Eclipse console doesn't show the whole output 或 Printing very big BigIntegers -
@Dylan IntelliJ 可能有与 Eclipse 类似的最大行长度问题,只是使用比 Eclipse 更短的行。它可能具有更改该限制的设置,类似于 Eclipse 所做的,如提供的链接中所示。
标签: java while-loop io java.util.scanner