2013-04-17 4 views
0

У меня есть csv, который я пытаюсь прочитать в массив объектов. Я продолжаю получать следующую ошибку ... java.util.InputMismatchException Я думаю, что это потому, что он читает файл, разбитый пробелами, а не запятыми. Я считаю, что мне нужно использовать метод String.split(), но я точно не знаю, как это сделать. Какие-либо предложения. Вот код, который я до сих пор ...Чтение файла csv в Java

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

Возможный дубликат [Чтение csv в Java] (http://stackoverflow.com/questions/16051283/reading-a-csv-in-java) –

ответ

0

вам необходимо прочитать данные, как String, а не int/double. После считывания данных как String проанализируйте его до int.

0

Это поможет, если вы вставляете строку текста, которая вызывает этот сбой. Как вы подозреваете, вероятно, пробел предшествует или преуспевает в разделительной запятой. Просто измените разделитель

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

На вашем месте я создаю отдельный класс боба

public class MyNewBean { 

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

    //get, set 
} 

End затем прочитать о преимуществах OpenCSV. Если вы используете запятую как delimenter, что вы должны делать с описанием, которое также может содержать запятые. Java боб на основе позиции поля в вашем CSV файл

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

Смежные вопросы