如何将令牌从csv文件读入对象数组

时间:2013-11-01 03:14:06

标签: java arrays object csv token

我正在编写一个从csv文件读取的程序,并将值放入一个对象数组中。所以我设置了一个有5个属性的对象类。我似乎无法得到的是如何将标记化变量放入我的对象数组中。我做了一个system.out.printf,它使用我的对象类中的getter打印出每个索引中的对象实例,但是我得到一个空指针。所以我的猜测是令牌没有存储在我的对象数组中,所以如何才能完成?这是我到目前为止所做的。

编辑:这是我的CSV文件中的一行 12345,左手培根担架,125.95,PGH,2

编辑:这是我得到的那些问题的堆栈跟踪错误     java.lang.NumberFormatException:对于输入字符串:“5”     at java.lang.NumberFormatException.forInputString(Unknown Source)     在java.lang.Integer.parseInt(未知来源)     在java.lang.Integer.parseInt(未知来源)     在Prog6.main(Prog6.java:97)

Part[] part = new Part[20];

String partNumber;
String description;
double price = 0.0;
String warehouseID;
int quantity = 0;

try
{
inFile = new Scanner( new File( "parts.txt" ) );
}
catch( FileNotFoundException e )
{
System.out.println( "Error: File parts.txt not found" );
}

// read file
try
{

while ( inFile.hasNext() )
{
String record = inFile.nextLine();
String[] tokens = record.split(",[ ]*");

partNumber = tokens[0];
description =  tokens[1] ;
price = Double.parseDouble( tokens[2] );
warehouseID =  tokens[3] ;
quantity = Integer.parseInt( tokens[4] );

part[num] = new Part( partNumber, description, price, warehouseID, quantity );
num++;

}
}
catch( Exception e )
{
System.out.println( "File error " + e.getMessage() );
}

// close file
inFile.close();

3 个答案:

答案 0 :(得分:1)

试试看看会发生什么

try
{   
    int row=1;
    while ( inFile.hasNext() )
    {
        String record = inFile.nextLine();
        String[] tokens = record.split(",");
        if(tokens.length==5){
            partNumber = tokens[0];
            description =  tokens[1] ;
            price = Double.parseDouble( tokens[2].trim());
            warehouseID =  tokens[3] ;
            quantity = Integer.parseInt( tokens[4].trim());
            part[num] = new Part( partNumber, description, price, warehouseID, quantity );
            num++;
        }
        else{
            System.out.println("Row "+row+" skipped (record not complete)");
        }
        row++;
    }
}

此外,您需要检查tokens[2]tokens[4]是否可解析。如果它的值是空字符串(“”),空格或不是数字。

答案 1 :(得分:0)

  1. 首先检查你的程序是否在循环中进入,你可以调试或添加打印语句

  2. 如果它进去的话,那么检查代币的长度

  3. 您的文件少于20条记录也是可以的吗?

  4. 还要共享您用于打印每个对象的异常statck跟踪和代码

    编辑:

    在catch块写System.out.println( "File error " + e.getMessage() );

    e.printStackTrace()的Instean

    改为使用:

    Integer.parseInt( tokens[4].trim() );
    

答案 2 :(得分:0)

问题是.csv文件中的一行是这样的:

blah,blah,blah,blah, 5

注意那里的空间,这就是导致NumberFormatException的原因。从.csv中删除此空格,尝试(如Rafa El建议的那样)在解析为整数之前修剪字符串,或尝试拆分以下正则表达式:" *, *"