Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.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文件,arrayindex越界错误_Java_Csv_File Io_Hashmap_Indexoutofboundsexception - Fatal编程技术网

Java 读取CSV文件,arrayindex越界错误

Java 读取CSV文件,arrayindex越界错误,java,csv,file-io,hashmap,indexoutofboundsexception,Java,Csv,File Io,Hashmap,Indexoutofboundsexception,我正在尝试读取csv文件,我创建了一个包含9个条目及其值的测试文件,但我的代码无法读取超过第二行的内容,它说该文件在超过第二个键时找不到,我已尝试尽可能多地修改它,有人能帮我吗?示例输入将包括类似的内容,但在一个csv文件中(因此,每一行中都有一个新的内容,我在这里是新手,还在这里学习编辑文本): 迭戈,2岁 玛丽亚,2岁 阿曼多,5岁 肯,1岁 publicstaticvoidmain(字符串[]args){ HashMap h=新的HashMap(511); 尝试 { Scanner rea

我正在尝试读取csv文件,我创建了一个包含9个条目及其值的测试文件,但我的代码无法读取超过第二行的内容,它说该文件在超过第二个键时找不到,我已尝试尽可能多地修改它,有人能帮我吗?示例输入将包括类似的内容,但在一个csv文件中(因此,每一行中都有一个新的内容,我在这里是新手,还在这里学习编辑文本): 迭戈,2岁 玛丽亚,2岁 阿曼多,5岁 肯,1岁

publicstaticvoidmain(字符串[]args){
HashMap h=新的HashMap(511);
尝试
{
Scanner readIn=new Scanner(新文件(“test1.csv”);
System.out.println(“我在这里1”);
while(readIn.hasNext())
{               
System.out.print(readIn.next());//仅用于测试目的
System.out.println(“检查2”);//仅用于测试目的
String line=readIn.nextLine();
字符串str[]=line.split(“,”);
对于(int i=0;i
对next()或nextLine()的调用应该在对hasNext()的调用之前进行。但是在您的代码中,您已经检查了hasNext()是否在while循环中返回true,然后在循环中同时调用next()和nextLine()。 您可以按如下方式修改代码:

while ( readIn.hasNext() )
            {               

                String line = readIn.nextLine();
                String str[] = line.split(",");

                for (int i = 0; i < str.length ; i++)
                {
                    String k = str[0];
                    int v = Integer.parseInt(str[1]);
                    h.put(k , v);
                }

                System.out.println(h.toString());

            }
while(readIn.hasNext())
{               
String line=readIn.nextLine();
字符串str[]=line.split(“,”);
对于(int i=0;i
您的for循环实际上不起作用。您将注意到,您从未在循环中实际引用
i
。在OP给出答案之前,我相信您试图在一个没有逗号的字符串上拆分,但是您的代码假设有一个逗号,因此出现了越界异常。这与我告诉您
println()
有问题的原因有关


就您关于
hasNext()
的问题而言,这是您知道可以从文件中读取另一行的唯一方法。如果你试图读到最后,你会遇到问题

而是自己编写代码来读取
CSV
文件。我建议您使用标准库,如。它提供了更多的方法来处理
CSV
选项卡分隔文件等

import java.io.FileReader;
import java.util.List;

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVRecord;

public class SO35859431 {
    public static void main(String[] args) {
        String filePath = "D:\\user.csv";
        try {
            List<CSVRecord> listRecords = CSVFormat.DEFAULT.parse(new FileReader(filePath)).getRecords();
            for (CSVRecord csvRecord : listRecords) {
                /* Get record using index/position */
                System.out.println(csvRecord.get(0));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
导入java.io.FileReader;
导入java.util.List;
导入org.apache.commons.csv.CSVFormat;
导入org.apache.commons.csv.CSVRecord;
公共类SO35859431{
公共静态void main(字符串[]args){
String filePath=“D:\\user.csv”;
试一试{
List listRecords=CSVFormat.DEFAULT.parse(新文件读取器(文件路径)).getRecords();
用于(CSVRecord CSVRecord:listRecords){
/*使用索引/位置获取记录*/
System.out.println(csvRecord.get(0));
}
}捕获(例外e){
e、 printStackTrace();
}
}
}

首先,HashMap类中没有这样的insert()方法。正确的方法是(k,v)&在while循环中,它应该是hasNext()。下面是我在BufferedReader中的代码

/* *要更改此许可证标题,请在“项目属性”中选择“许可证标题”。 *要更改此模板文件,请选择工具|模板 *然后在编辑器中打开模板。 */ 包装阅读

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Scanner;

/**
 *
 * @author Isuru Rangana Jr
 */
public class Read {

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) throws FileNotFoundException, IOException {
        HashMap<String, Integer> h = new HashMap<String, Integer>();

        try {
            BufferedReader readIn = new BufferedReader(new FileReader(new File("test.csv")));

            while (readIn.ready()) {

                String line = readIn.readLine();
                String str[] = line.split(",");


                for (int i = 0; i < str.length; i++) {
                    String k = str[0];
                    int v = Integer.parseInt(str[1]);
                    h.put(k, v);
                }

                System.out.println(h.toString());

            }
            readIn.close();
        } catch (ArrayIndexOutOfBoundsException ob) {
            System.out.println(" - The file wasn't found.");
        }
    }

}
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.util.HashMap;
导入java.util.Scanner;
/**
*
*@作者小伊苏鲁·兰加纳
*/
公开课阅读{
/**
*@param指定命令行参数
*/
公共静态void main(字符串args[])抛出FileNotFoundException、IOException{
HashMap h=新的HashMap();
试一试{
BufferedReader readIn=新的BufferedReader(新文件读取器(新文件(“test.csv”));
while(readIn.ready()){
String line=readIn.readLine();
字符串str[]=line.split(“,”);
对于(int i=0;i
请提供一些示例输入。我尝试过,这些名称、数字对中的每一个都在一个新行中。您还可以提供您看到的错误输出吗?我认为这行系统是.out.print(readIn.next());可能正在删除您的代码。内容如下:我在这里1\n Diego,2检查2\n Maria,2\n-文件未找到谢谢!这起作用了。请允许我问一下,为什么需要在调用hasNext()之前执行此操作?Scanner文档()提供了如何使用每个方法的详细信息。这将使问题变得清楚。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Scanner;

/**
 *
 * @author Isuru Rangana Jr
 */
public class Read {

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) throws FileNotFoundException, IOException {
        HashMap<String, Integer> h = new HashMap<String, Integer>();

        try {
            BufferedReader readIn = new BufferedReader(new FileReader(new File("test.csv")));

            while (readIn.ready()) {

                String line = readIn.readLine();
                String str[] = line.split(",");


                for (int i = 0; i < str.length; i++) {
                    String k = str[0];
                    int v = Integer.parseInt(str[1]);
                    h.put(k, v);
                }

                System.out.println(h.toString());

            }
            readIn.close();
        } catch (ArrayIndexOutOfBoundsException ob) {
            System.out.println(" - The file wasn't found.");
        }
    }

}