将多个文件读取到多个arraylists

时间:2018-01-02 12:43:51

标签: java io

我有5个文本文件,我试图将它们分别读入单个数组列表中,因此5个文件需要存储5个数组列表。

我编写的代码成功地将所有五个文本文件存储到一个数组列表中。 我发现while循环在第一个场景中只执行一次,所以问题出在while循环中以及它是如何执行的,但不幸的是我无法准确地找出问题。 我的代码在这里访问我的文件所在的目录,然后我列出这些文件并将它们存储到一个文件数组中。 在第一个for循环中,我将目录路径与文件名连接起来 在第二个循环中,我正在读取文件的内容。

正如我前面提到的,整个问题是while循环,这就是我弄清楚的。

这是我的代码:

public ArrayList<ArrayList<String>> readFromFile() throws IOException
    {
        ArrayList<ArrayList<String>>data = new ArrayList<ArrayList<String>>();
        String s =null; 
        File file = new File("/home/abed/Downloads/practical_database_java-StudentVers/practical_database_java/Database/Oracle") ;
        String []files = file.list();
        String [] filestoberead = new String[files.length];

        for(int i = 0 ;i<files.length;i++)
        {
            filestoberead[i] = file+"/"+files[i] ;
            System.out.println(filestoberead[i]);
        }

        for(int j =0;j<filestoberead.length;j++)
        {
            try(BufferedReader reader= new BufferedReader(new FileReader(filestoberead[j])))
            {
                reader.readLine();
                while((s=reader.readLine())!=null)
                {

                    data.get(j).add(s);
                }
            }
        }




        return data  ; 
    }

3 个答案:

答案 0 :(得分:0)

在使用之前尝试创建列表:

data.add(new ArrayList<String>());
try(BufferedReader reader= new BufferedReader(new FileReader(filestoberead[j])))
{
    reader.readLine();
    while((s=reader.readLine())!=null)
    {
        data.get(j).add(s);
    }
}

更新:

而且,顺便说一句,你可以简化filestoberead

的创建
    File dir = new File("/home/abed/Downloads/practical_database_java-StudentVers/practical_database_java/Database/Oracle") ;
    File[] filestoberead = dir.listFiles();

答案 1 :(得分:0)

你的行为中有一个错误,你有一个额外的reader.readLine();

试试这个:

 try(BufferedReader reader= new BufferedReader(new FileReader(filestoberead[j])))
            {
                ArrayList<String> tmp = new ArrayList<>();
                while((s=reader.readLine())!=null)
                {
                    tmp.add(s);
                }
                data.add(tmp)

            }

答案 2 :(得分:0)

你也可以在NIO

中做到这一点
        try {
            List<List<String>> contents = new ArrayList<>();
            Iterator<Path> it = Files.newDirectoryStream(Paths.get("."), "*.*").iterator();
            while(it.hasNext()){
               contents.add(Files.readAllLines(it.next()));
            }

        } catch (IOException e) {
              e.printStackTrace();
        }