簡體   English   中英

如何使用掃描儀將多個數據類型文件讀取到ArrayList中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM