簡體   English   中英

Java中的數組列表出現問題(總是將最后一個元素放入數組中)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM