Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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_File_Csv - Fatal编程技术网

Java 读取csv文件导致数字格式异常

Java 读取csv文件导致数字格式异常,java,file,csv,Java,File,Csv,我正在使用csvwriter写入csv文件,然后调用其方法writeAll。写入后,我正在使用缓冲读取器读取相同的文件,这会导致数字格式异常。如何解决该问题 public static void writeInventoryToUpdate(List<String[]> data)throws IOException { String csv = "E:\\Semester 3\\PointOfSale2\\Inventory.csv"; CSVWriter wri

我正在使用csvwriter写入csv文件,然后调用其方法writeAll。写入后,我正在使用缓冲读取器读取相同的文件,这会导致数字格式异常。如何解决该问题

public static void writeInventoryToUpdate(List<String[]> data)throws IOException {

    String csv = "E:\\Semester 3\\PointOfSale2\\Inventory.csv";
    CSVWriter writer = new CSVWriter(new FileWriter(csv));

    writer.writeAll(data);
    writer.close();        
}


public void initInventory() throws FileNotFoundException, IOException {

    BufferedReader readInventory=new BufferedReader(new FileReader("E:\\Semester 3\\PointOfSale2\\Inventory.csv"));

    String line=readInventory.readLine();

    StringTokenizer nextItem;
    while(line!=null){
        nextItem=new StringTokenizer(line, ",");
        while(nextItem.hasMoreTokens()){
            int productID=Integer.parseInt(nextItem.nextToken()); //Exception occuring here
            int quantity=Integer.parseInt(nextItem.nextToken());
            Inventory inventory=new Inventory(productID, quantity);
            inStock.add(inventory);
            line=readInventory.readLine();
        }
    }
    readInventory.close();
}

public static void writeInventoryToUpdate(列表数据)引发IOException{
String csv=“E:\\3学期\\销售点2\\Inventory.csv”;
CSVWriter writer=新CSVWriter(新文件编写器(csv));
writer.writeAll(数据);
writer.close();
}
public void initInventory()引发FileNotFoundException,IOException{
BufferedReader readInventory=新的BufferedReader(新文件阅读器(“E:\\Semmer 3\\PointOfSale2\\Inventory.csv”);
String line=readInventory.readLine();
StringTokenizer nextItem;
while(行!=null){
nextItem=新的StringTokenizer(行,“,”);
while(nextItem.hasMoreTokens()){
int productID=Integer.parseInt(nextItem.nextToken());//此处发生异常
int quantity=Integer.parseInt(nextItem.nextToken());
存货=新的存货(产品ID、数量);
增加库存(库存);
line=readInventory.readLine();
}
}
readInventory.close();
}

您的代码基本上是正确的想法,但在流程上存在一些问题

BufferedReader readInventory=new BufferedReader(new FileReader("E:\\Semester 3\\PointOfSale2\\Inventory.csv"));

for(String line = readInventory.readLine(); line != null; line = readInventory.readLine())
{
    StringTokenizer nextItem = new StringTokenizer(line, ",");
    if(nextItem.countTokens() >= 2)
    {
        int productID = Integer.parseInt(nextItem.nextToken());
        int quantity = Integer.parseInt(nextItem.nextToken());
        Inventory inventory=new Inventory(productID, quantity);
        inStock.add(inventory);
    }
}
readInventory.close();
这里有一些东西应该在输入的情况下起作用

12345,67890
15243,60798
3,6
77,12355678,123 //anything past the first two values are ignored
555
777,333 //and single value things are skipped
如果看不到您试图解析的CSV文件类型,我就无法为您提供更好的解决方案


但是对于最基本形式的CSV文件(两个int值之间用逗号分隔),通过编辑您的问题向我们显示代码和完整堆栈跟踪,这应该可以很好地工作,并标记代码中出现问题的行。在您向我们展示CSV文件的格式或用于写入/读取CSV文件的代码之前,我们确实无法为您提供太多帮助-您必须帮助我们帮助您公开静态无效writeInventoryToUpdate(列表数据)引发IOException{String CSV=“E:\\Sterm 3\\PointOfSale2\\Inventory.CSV”;CSVWriter writer=new CSVWriter(new FileWriter(csv));writer.writeAll(data);writer.close();}还包括一个csv文件的示例,尽管堆栈跟踪应该显示异常发生在哪一行,以便您可以看到它试图读取的字段。还要注意的是,csv文件可以有标题,字段可以被引用,这两个都不能处理。调试它吗?什么是nextItem.nextToken()?在寻求帮助之前,您应该了解如何调试应用程序。