我有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 ;
}
答案 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();
}