Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中读取csv文件_Java_Regex_Csv - Fatal编程技术网

在Java中读取csv文件

在Java中读取csv文件,java,regex,csv,Java,Regex,Csv,我有一个csv,我正试图读入一个对象数组。我一直得到以下错误。。。我认为这是因为它读取的文件是按空格分割的,而不是按逗号分割的。我相信我需要使用String.split()方法,但我不确定具体如何做到这一点。任何建议。这是我到目前为止的代码 public class Prog7 { public static void main(String[] args) { Part[] parts; int numParts; int partNumber; String

我有一个csv,我正试图读入一个对象数组。我一直得到以下错误。。。我认为这是因为它读取的文件是按空格分割的,而不是按逗号分割的。我相信我需要使用String.split()方法,但我不确定具体如何做到这一点。任何建议。这是我到目前为止的代码

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());
    }
}
}
公共类程序7
{
公共静态void main(字符串[]args)
{
第[]部分;
国际货币基金组织;
内部零件号;
字符串描述;
双倍价格;
整数;
字符串城市;
零件=新零件[100];
numParts=0;
扫描仪填充=空;
/*
*打开文件
*/
尝试
{
infle=新扫描仪(新文件(“C:/COSC 210/Assignment#7/parts.txt”);
}
catch(filenotfounde异常)
{
System.err.println(“错误:未找到文件”);
}
填充。使用分隔符(“,”);
while(infle.hasNext())
{
partNumber=infle.nextInt();
description=infle.next();
price=infle.nextDouble();
city=infle.next();
数量=infle.nextInt();
零件p=新零件(零件号、说明、价格、,
数量(城市);
零件[numParts]=p;
numParts++;
}
infle.close();
对于(int i=0;i
您需要将数据读取为
字符串,而不是
int/double
。将数据读取为
String
后,将其解析为
int

如果粘贴导致此失败的文本行,则会有所帮助。正如您所怀疑的,可能在分隔逗号之前或之后有一个空格字符。只需将分隔符更改为

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

在您的位置,我创建了单独的bean类

public class MyNewBean {

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

    //get, set
}
最后,阅读OpenCSV的优点。如果您使用逗号作为删除符,您应该如何处理也可以包含逗号的描述。基于CSV文件中的字段位置的JavaBean

 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);

阅读更多关于

的信息,如果可以的话,请使用类似的工具,我发现它非常简单、快速且易于使用。可能与