从文件中读取数据并将其存储在数组列表中

时间:2016-05-08 04:55:27

标签: java

例如,我在文件夹中有两个CSV文件,需要逐行读取一个文件中的数据,并将其像数据列表A一样存储在数据列表B中,如文件2中那样动态地存储。即如果有3个文件,它应该存储在数组列表C

public class DashboardReport
{
    public static void main(String[] args)
    {
        int count = 0;
        String line = "";

        File folder = new File("D:/April");
        File[] listOfFiles = folder.listFiles();

        System.out.println("Count" + listOfFiles.length);
        count = listOfFiles.length;

        List books = new ArrayList();

        for (int i = 0; i <= listOfFiles.length; i++)
        {
            if (listOfFiles[i].isFile())
            {
                System.out.println("File " + listOfFiles[i].getName());
                Path pathToFile = Paths.get(listOfFiles[i].getName());

                try (BufferedReader br = Files.newBufferedReader(
                    pathToFile, StandardCharsets.US_ASCII))
                {
                    line = br.readLine();
                    String[] attributes = {};

                    while (line != null)
                    {
                        attributes = line.split(",");
                        books.add(attributes);

                        line = br.readLine();
                    }
                }
                catch (IOException ioe)
                {
                    ioe.printStackTrace();
                }
            }
            else if (listOfFiles[i].isDirectory())
            {
                System.out.println("Directory " + listOfFiles[i].getName());
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

这里有两个错误。一个是for循环。

for (int i = 0; i <= listOfFiles.length; i++)
                   ^

在迭代数组时,通常会从0length - 1而不是0迭代到length

然后第二个是你没有考虑路径,只有文件名。

Path pathToFile = Paths.get(listOfFiles[i].getName());
                                           ^

这将搜索具有相同名称但在当前工作目录中的文件,并且通常不会找到它。将其更改为使用绝对路径。

Path pathToFile = Paths.get(listOfFiles[i].getAbsolutePath());

现在,您将从文件存在的D:\April\目录中获取文件。