读取csv文件并存储在数组中

时间:2016-10-10 10:19:06

标签: java file-io

我得到的练习题是说我需要

创建一个读取csv文件的java代码,其中包含名称和高度。

要读取文件,您必须从用户那里获取文件名作为字符串。

然后你必须将文件的内容存储到两个数组中,一个用于名称(字符串)和高度(实数)。

你应该至少阅读两次文件,一次检查文件中有多少学生(这样你就知道你需要存储多少学生),再多几次来实际读取文件(获取名称和高度)。

然后提示用户输入你想要的名字的高度。它应输出userinput的高度。

示例csv文件是

克里斯,180

杰斯,161

詹姆斯,174

它并不多,但这是我能想到的全部我不知道如何分别存储名称和高度并使用该数组输出结果。我需要在代码中的某处使用split吗?我记得学习它,但不知道它是否在这种情况下使用

import.java.util.*;
private class StudentNameHeight
private void main (string [] args)
{ 
    String filename;
    Scanner sc = new scanner(system.in);
    System.out.println("enter file name")
    filename = sc.nextline();
    readFile (filename);
}

private void readFile (String filename)
{
    FileInputStream fileStrm = null;
    InputStreamReader rdr;
    BufferedReader bufRdr;

    try 
   {
        fileStrm = new FileInputStream(filename);
        rdr = new InputStreamReader(fileStrm);
        bufRdr = new BufferedReader(rdr);

        // ?


    catch (IOException e)
    {
        if (fileStrm != null)
        {
           try {fileStrm.close(); } catch (IOException e2){}
        }
        System.out.println("error in processing" + e.getMessage());
    }
}

我是java新手所以,任何小小的提示或帮助都会很棒

感谢

1 个答案:

答案 0 :(得分:0)

你的代码看起来很乱。据我所知,您可以阅读包含两个实体的CSV文件,一个是名称,另一个是高度,并将这两个实体存储在两个不同的数据结构中。我在下面的代码片段中教你一个简单的方法来实现这个目的。

public void processCSVFile(String filePath){
        try(BufferedReader fileReader = new BufferedReader(new FileReader(new File(filePath)))){
            //Create two lists to hold name and height.
            List<String> nameList = new ArrayList<>();
            List<Integer> heightList = new ArrayList<>();

            String eachLine = "";
            /*
             * Read until you hit end of file.
             */
            while((eachLine = fileReader.readLine()) != null){
                /*
                 * As it is CSV file, split each line at ","
                 */
                String[] nameAndHeightPair = eachLine.split(",");

                /*
                 * Add each item into respective lists.
                 */
                nameList.add(nameAndHeightPair[0]);
                heightList.add(Integer.parseInt(nameAndHeightPair[1]));
            }

            /*
             * If you are very specific, you can convert these
             * ArrayList to arrays here.
             */
        }catch(IOException e1){
            e1.printStackTrace();
        }
    }