2013-04-17 115 views
0

我有一个csv,我正试图读入一个对象数组。我不断收到以下错误... java.util.InputMismatchException我认为这是因为它读取文件拆分空间而不是逗号。我相信我需要使用String.split()方法,但我不确定如何执行此操作。有什么建议么。这里是我迄今为止代码...在Java中读取csv文件

public class Prog7 
{ 
public static void main(String[] args) 
{ 
    Part[] parts; 
    int numParts; 
    int partNumber; 
    String description; 
    double price; 
    int quantity; 
    String city; 

    parts = new Part[100]; 
    numParts = 0; 

    Scanner inFile = null; 

    /* 
    * open file 
    */ 
    try 
    { 
     inFile = new Scanner(new File("C:/COSC 210/Assignment#7/parts.txt")); 
    } 
    catch (FileNotFoundException e) 
    { 
     System.err.println("Error: file not found"); 
    } 

    inFile.useDelimiter(","); 
    while(inFile.hasNext()) 
    { 
     partNumber = inFile.nextInt(); 
     description = inFile.next(); 
     price = inFile.nextDouble(); 
     city = inFile.next(); 
     quantity = inFile.nextInt(); 

     Part p = new Part(partNumber, description, price, 
        quantity, city); 
     parts[numParts]= p; 
     numParts++; 
    } 
    inFile.close(); 

    for (int i = 0; i < numParts; i++) 
    { 
     System.out.println(parts[i].getPartNumber()); 
    } 
} 
} 
+3

如果可以的话,使用类似[OpenCSV(http://opencsv.sourceforge.net/)相反,我总是发现它非常简单,快速和易于使用。 – MadProgrammer

+0

[读取Java中的csv]的可能重复(http://stackoverflow.com/questions/16051283/reading-a-csv-in-java) –

回答

0

你需要为String,而不是int/double读取数据。读取数据后,将String解析为int

0

如果您粘贴引起此故障的文本行,将会有所帮助。正如你怀疑的那样,可能是一个空格字符先于或后接分隔的逗号。只是分隔符更改为

inFile.useDelimiter("\\s*,\\s*") 
0

在你的地方,我创建单独的bean类

public class MyNewBean { 

    int numParts; 
    int partNumber; 
    String description; 
    double price; 
    int quantity; 
    String city; 

    //get, set 
} 

末再了解OpenCSV的优势。如果使用逗号作为分隔符,那么应该如何处理可能包含逗号的描述。根据您的CSV现场位置的Java Bean文件

CSVReader reader = new CSVReader(new FileReader("C:/COSC210/Assignment#7/parts.txt")); 
ColumnPositionMappingStrategy strat = new ColumnPositionMappingStrategy(); 
strat.setType(MyNewBean.class); 
String[] columns = new String[] {"numParts", "partNumber", "description", "price",     "quantity", "city"}; // the fields to bind do in your JavaBean 
strat.setColumnMapping(columns); 
CsvToBean csv = new CsvToBean(); 
List list = csv.parse(strat, yourReader); 

了解更多关于OpenCSV