[英]How to read multiple data type file into ArrayList using Scanner
我正在嘗試使用帶有定界符“ \\ s \\ s”的Scanner將多個數據類型的文件讀取到ArrayList對象中,但是它似乎沒有按預期工作。 我正在使用printf來查看是否可以正確存儲數據,以后將用於計算的數據。 數據似乎正確顯示,但是我仍然收到“文件格式錯誤”異常。 循環似乎也有問題。 使用對象的ArrayList時總是卡住。
樣本文本文件:
item item descr 100 1.50
item2 item descr 250 2.50
item2 item descr 250 3.50
碼:
import java.io.*;
import java.util.*;
public class ReadItems
{
private Scanner input;
ArrayList<Item> item = new ArrayList<Item>();
//open text file
public void openFile()
{
try
{
FileReader in = new FileReader("Items.txt");
input = new Scanner(in).useDelimiter("\\s\\s");
}
catch( FileNotFoundException fileNotFound)
{
System.err.println( "Error opening file.");
System.exit(1);
}
}
//read file
public void readFile()
{
try
{
while ( input.hasNextLine())
{
item.add( new Item(input.next(), input.next(), input.nextInt(), input.nextFloat() ));
for (Item list : item)
{
System.out.printf("%-10s%-48s$%5.2f\n", list.getCode(), (list.getDecription()+ ", "+ list.getWeight()+ "g"), + list.getPrice());
//System.out.println(item);
}
}
}
catch ( NoSuchElementException elementEx)
{
System.err.println( "Incorrect file format.");
System.exit(1);
}
catch ( IllegalStateException stateEx )
{
System.err.println( "Error reading from file.");
System.exit(1);
}
}
public void closeFile()
{
if (input != null)
input.close();
}
}
輸出:
item item descr, 100g $ 1.50
item item descr, 100g $ 1.50
item2 item descr, 250g $ 2.50
item item descr, 100g $ 1.50
item2 item descr, 250g $ 2.50
item2 item descr, 250g $ 3.50
文件格式錯誤。
對不起,看來我在做傻事。 我不是通過main
所在的測試類來運行程序的。
測試類別:
public class TestReadItems
{
public static void main(String[] args)
{
ReadItems application = new ReadItems();
application.openFile();
application.readFile();
application.closeFile();
}
}
該程序運行沒有錯誤,但是我似乎無法獲得while循環正常運行。 輸出增加了兩倍。
這是因為要打印輸出的for
循環在while
循環內。 因此,它讀取文件的每一行並返回輸出。 因此,要更正,請從while
語句內部替換for
循環的輸出for
並在while
循環完成后將其寫入。
該循環還會在文件末尾爆破。 我在item.add()調用之后添加了對.nextLine()的調用,現在對我來說很好。
while ( input.hasNextLine()) {
item.add( new Item(input.next(), input.next(), input.nextInt(), input.nextFloat() ));
for (Item list : item) {
System.out.printf("%-10s%-48s$%5.2f\n", list.getCode(), (list.getDecription()+ ", "+ list.getWeight()+ "g"), + list.getPrice());
}
input.nextLine(); // added
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.