0

我有一个要加载到自定义数组中的 .dat 文件。我如何让它实际将数据加载到数组中。数据由 (String, int, int, double, String) 组成。

class CDinventoryItem{


   private CDinventoryItem [] inven = new CDinventoryItem[1000];


    public CDinventoryItem (String title, int itemNumber, int numberofUnits, 
    double unitPrice, String genre){

              DataInputStream input;

            try{

                input = new DataInputStream(new FileInputStream("inventory.dat"));

                inven = input.read(CDinventoryItem[]);  //line I am receiving error on


            }
            catch ( IOException error ){
                JOptionPane.showMessageDialog( null, "File not found",
                "" ,JOptionPane.ERROR_MESSAGE);
            }


        }

}

所以现在 readFile 在它自己的类中......

class readFile {
public CDinventoryItem[] inven;

    public readFile(){

BufferedReader in = null;

try {
    in = new BufferedReader(new FileReader("inventory.dat"));
    String line = null;
    int i = 0;
    while ((line = in.readLine()) != null) {

        // process each line
        String[] parts = line.split(",");
        String title = parts[0];
        int itemNumber = Integer.parseInt(parts[1]);
        int numberofUnits = Integer.parseInt(parts[2]);
        double unitPrice = Double.parseDouble(parts[3]);
        String genre = parts[4];

        CDinventoryItem item = new CDinventoryItem(title, itemNumber, numberofUnits, 
unitPrice, genre);

        //add item to array
        inven[i] = item;
        i++;
    }
} catch (IOException e) {
    e.printStackTrace();
} finally {
    if (in != null) {
        try {
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
}}

我从我的 CDinventory 类中调用它

        readFile invenItem = new readFile();
        list = new JList(invenItem.inven);

但它给了我一个:线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 1 on line: readFile invenItem = new readFile();

似乎不喜欢我那样传递数组。

4

1 回答 1

0

您需要逐行读取文件。拆分每一行,并创建一个 CDInventoryItem。将项目添加到您的数组中。

另外,请注意,此方法不应在CDInventoryItem. 你的CDInventoryItem班级甚至不应该有一个 s 数组CDInventoryItem。所有这些都应该在一个单独的类中完成。

以下是一些帮助您入门的代码:

public void readFile() {

    BufferedReader in = null;

    try {
        in = new BufferedReader(new FileReader("inventory.dat"));
        String line = null;
        int i = 0;
        while ((line = in.readLine()) != null) {

            // process each line
            String[] parts = line.split(",");
            String title = parts[0];
            int itemNumber = Integer.parseInt(parts[1]);
            int numberOfUnits = Integer.parseInt(parts[2]);
            double unitPrice = Double.parseDouble(parts[3]);
            String genre = parts[4];

            CDinventoryItem item = new CDinventoryItem(title, itemNumber, unitPrice, genre);

            //add item to array
            inven[i] = item;
            i++;
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (in != null) {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
于 2011-01-29T19:02:29.507 回答