簡體   English   中英

遍歷我從 CSV 文件創建的數組

[英]Iterating over an array i have created from CSV file

我已經通過首先以一種方法讀取文件的行然后在另一種方法中拆分這些行來將 CSV 文件讀入一個數組,並且想知道如何在我的 main 中迭代這個數組以訪問特定值。 我的代碼如下;

public class MainMenu
{   
    public static void readFile(String file)
    {
        FileInputStream fileStream = null;
        InputStreamReader isr;
        BufferedReader bufRdr;
        int lineNum;
        String line;
        try {
            fileStream = new FileInputStream(file);
            isr = new InputStreamReader(fileStream);
            bufRdr = new BufferedReader(isr);
            lineNum = 0;
            line = bufRdr.readLine();
            while((line != null) && lineNum < 27) {
                lineNum++;
                processLine(line);
                line = bufRdr.readLine();
            }
            
            fileStream.close();
        } catch (IOException e) {
            if(fileStream != null) {
                try {
                    fileStream.close();
                  } catch(IOException ex2) {
                }
            }
             System.out.println("Error: "+e.getMessage());
        }
    }

    private static void processLine(String csvRow)
    {
        String[] splitLine;
        splitLine = csvRow.split(",");
        int lineLength = splitLine.length;

        for(int i = 0; i < lineLength; i++) {
            System.out.print(splitLine[i]+" ");
        }
        System.out.println("");
    }

    public static void main(String[] args) {
        System.out.println("============================================"+"\n"+"Data from CSV file to be analysed:"+"\n");
        readFile("jrc-covid-19-all-days-of-world_ASSIGNMENT-FIXED.csv");
        System.out.println("============================================");
        //want to have code here to iterate through the array and access whichever value necessary
    }

最簡單的方法是在 processLine 和 readFile 方法中返回拆分數組。 例如:

public static List<String[]> readFile(String file) {
    // create BufferedReader...
    List<String> lines = new ArrayList();

    while (((line = bufRdr.readLine()) != null) && lineNum < 27) {
        lineNum++;
        lines.add(processLine(line));
    }

    return lines;
}

public static String[] processLine(String row) {
   String[] splitLine = row.split(",");
   // print line...
   return splitLine;
}

public static void main(String[] args) {
    List<String[]> lines = readFile("filename.csv");
    // iterate over lines
}

請注意,您還可以使用 2D 數組而不是數組列表:

public static String[][] readFile(String file) {
    // create reader...
    String[][] lines = new String[27][] // assuming you only want 27 lines

    while (((line = bufRdr.readLine()) != null) && lineNum < 27) {
        lines[lineNum] = processLine(line));
        lineNum++;
    }

    return lines;
}

您還應該考慮在 finally 塊中關閉您的流,甚至更好:使用 try-with-resources 語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM