簡體   English   中英

使用 isEmpty() 方法時獲取 Null 指針異常

[英]Getting Null Pointer Exception when using isEmpty() method

我正在嘗試為我的程序實現登錄功能,但它返回 null 指針異常。 我知道當您引用 memory 中沒有任何內容的地方時會發生這種情況,但據我所知,我已經正確實例化了所有對象 - 如果我錯了,請糾正我!

我正在嘗試實現添加用戶功能:我有一個用戶名和密碼列表,並且我有一個現有方法可以讀取該文件並將其存儲在一個數組中。 我想在列表中寫入一個新的登錄名,所以我編寫了一個新方法,將這個數組轉換為 ArrayList 並最終寫入一個新的登錄名,然后再次寫出登錄文件。 問題是我得到了 Null 指針異常。

方法一:

public String[] readFile(){
    ArrayList<String> dataList = new ArrayList<String>();
    String Line;
    try {
        String line = br.readLine();
        do {                
            dataList.add(Line);
            line = br.readLine();
        }
        while (!line.isEmpty());
        br.close ();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    String[] dataArr = new String[dataList.size()];
    dataArr = dataList.toArray(dataArr);

    return dataArr; // Returns an array containing the separate lines of the file
}

方法二:

public void addNewUser (String username, String password){
    String[] dataArr = readFile();  // Read in the list of profiles and store it in an array
    ArrayList<String> dataAL = new ArrayList<String>(Arrays.asList(dataArr));   // store array of profiles as ArrayList
    dataAL.add(username + "\t" + password);

}

你可能在這里得到空指針

while (!line.isEmpty());

改為

while(line!=null && !line.isEmpty())

如果你注意了異常的堆棧跟蹤,你應該看到引發異常的確切行

如果到達流的末尾,BufferedReader.readLine()將返回null。 所以你要

while (line != null && !line.isEmpty())

`包-> org.springframework.util

.CollectionUtils.isEmpty(行)

內部實現: public static boolean isEmpty(@Nullable Collection<?> collection) { return (collection == Z37A6259CC0C1DAE299A7866489(DFF0BDZ || collection.isEmpty)); }`

try塊的主體更改為:

String line = br.readLine();
while (line != null) {                
    dataList.add(Line);
    line = br.readLine();
}
br.close ();

如果要忽略空行,請將其更改為:

String line = br.readLine();
while (line != null) {                
    if (!line.isEmpty()) {
        dataList.add(Line);
    }
    line = br.readLine();
}
br.close ();

到目前為止提供的其他答案將在第一個空白行停止閱讀。 (如果沒有空行,則不需要調用isEmpty() 。)

我不明白為什么要在readFile方法中向dataList添加空值。 無論如何,我已經重構了你的代碼:

方法1

public ArrayList<String> readFile(){
    ArrayList<String> dataList = new ArrayList<String>();

    try {
        //File & File Reader/Stream Initialization Logic

        while(line = br.readLine() != null && !line.isEmpty()) {               
            dataList.add(line);
        }
    } catch (IOException IOE) {
        //IO Exception Handling
    } catch (Exception e) {
        //General Exception Handling
    } finally {
        //close the reader/streams here
    }

    return dataList;
}

方法2

public void addNewUser (String username, String password){
    ArrayList<String> dataAL = readFile();
    dataAL.add(username + "\t" + password);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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