我对数组列表有问题
public void loadFiles(String folder, List<MyFile> listFiles) {
MyFile myfile = new MyFile();
File directory = new File(folder);
//get all the files from a directory
File[] fList = directory.listFiles();
for (File file : fList) {
if (file.isDirectory()) {
loadFiles(file.toString());
}
if (file.isFile()) {
//set name and size to myfile
myfile.setName(file.getName());
myfile.setSize(file.length());
listFiles.add(myfile);
}
}
}
在文件夹(Myfolder)上有3个文件(TC1,TC2,TC3)。 但在listFiles输出中(TC1,TC1,TC1) 发生了什么事解释了我。 以及如何解决此问题
谢谢
答案 0 :(得分:0)
每次循环浏览文件时,都将同一对象添加到List
中。您需要创建一个要添加的新文件,而不仅仅是每次更改myFile
的名称:
if (file.isFile()) {
//set name and size to NEW MyFile
MyFile newFile = new MyFile();
newFile .setName(file.getName());
newFile .setSize(file.length());
listFiles.add(newFile );
}
答案 1 :(得分:0)
感谢@Raj “在for循环内创建一个类似MyFile myfile = new MyFile();的新实例,然后将其添加到listFiles。当前,您只是多次添加同一对象。” –拉吉1分钟前
public void loadFiles(String folder, List<MyFile> listFiles) {
File directory = new File(folder);
//get all the files from a directory
File[] fList = directory.listFiles();
for (File file : fList) {
**MyFile myfile = new MyFile();**
if (file.isDirectory()) {
loadFiles(file.toString());
}
if (file.isFile()) {
//set name and size to myfile
myfile.setName(file.getName());
myfile.setSize(file.length());
listFiles.add(myfile);
}
}
}
有效。 谢谢大家。
答案 2 :(得分:0)
在您的示例中,您希望在列表中获得三个不同的文件实例,但是您只能创建一个-在代码中仅执行一次新的MyFile()。
因此您获得了对同一对象的三个引用。而且,每当通过myfile.setName(file.getName());
和myfile.setSize(file.length());
更改该实例的属性时,您都会在引用该实例的所有位置看到该更改,因此在列表的所有三个位置都得到相同的结果。>
代替
myfile.setName(file.getName());
myfile.setSize(file.length());
您应该做类似的事情
myfile = new MyFile(file.getName(), file.length());
在循环内。