[英]Problem with Array list in java (always take the last element into the array)
我對數組列表有問題
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)中,發生了什么事解釋了我。 以及如何解決這個問題
謝謝
每次循環瀏覽文件時,都將同一對象添加到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 );
}
感謝@Raj“在for循環內創建一個類似MyFile myfile = new MyFile();的新實例,然后將其添加到listFiles。當前,您只是多次添加同一對象。” – Raj 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);
}
}
}
這行得通 。 謝謝大家
在您的示例中,您希望在列表中獲得三個不同的文件實例,但您僅創建一個-在代碼中僅執行一次新的MyFile()。
因此,您獲得了對同一對象的三個引用。 並且每當您通過myfile.setName(file.getName());
更改該實例的屬性時myfile.setName(file.getName());
和myfile.setSize(file.length());
,您會在引用該實例的所有位置看到更改,因此在列表的所有三個位置都得到相同的結果。
代替
myfile.setName(file.getName());
myfile.setSize(file.length());
你應該做類似的事情
myfile = new MyFile(file.getName(), file.length());
在你的循環中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.