簡體   English   中英

從輸入流創建字符串的只讀數組列表

[英]Creating an read only arraylist of string from inputstream

我一直試圖存儲從輸入流到arraylist的字符串。

首先我已經使用以下方式將inputStream轉換為字符串

IOUtils.copy(inputStream , str);
str.toString();

然后我試圖將此字符串存儲為arraylist為:

public static final List<String> list = Collections.unmodifiableList(new ArrayList<String>(Arrays.asList(str.split("\n"))));

它顯示錯誤:

  1. 參數列表的非法修飾符,僅允許使用final
  2. 類型安全:List類型的表達式需要未經檢查的轉換才能符合List

請告訴我我哪里錯了?

如果在方法內部使用,則局部變量不允許使用staticpublic類型。

像這樣

 List<String> list = Collections.unmodifiableList(new ArrayList<String>(Arrays.asList(str.split("\n"))));

讓我們來看看。 首先,關鍵字staticpublic只能應用於類字段(如果談論數據而不是方法),而不能應用於局部變量。

關於final關鍵字,有幾句話要說。 在Java中,有兩種類型:基元(int,float,double等)和引用。 如果將final關鍵字應用於原始類型的變量,則實際上可以防止其被更改。

對於引用類型,則更為復雜。 例如:

final List<String> list = new ArrayList<>();

您不能更改列表變量(它是對實際列表的引用),但是可以修改列表本身。 如果要防止列表被修改,請使用unmodifiableList方法:

final List<String> list = Collections.unmodifiableList(new ArrayList<>());

Collections.unmodifiableList您可以直接傳遞Arrays.asList ,因為它會給您一個列表。 無需再次包裝ArrayList實例。

另外,還沒有引用到新創建的列表。

您可以這樣:

List<String> list = Collections.unmodifiableList(Arrays.asList(str.split("\n")));

通過Arrays.asList您不能添加或刪除元素。

通過不可修改的列表,您不能使用內部列表中的設置方法添加,刪除或修改

package com.test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class Test {
    public static void main(String[] args) throws FileNotFoundException, IOException {
        InputStream in = new FileInputStream(new File("/home/ikuser/testing.txt"));// Give Path Of the file
        List<String> list = new ArrayList<String>(); // Initialize List
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        StringBuilder out = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            out.append(line);
            list.add(line); // Add Line in the list
        }
        reader.close();
        for(String l : list){
            System.out.println(l); //list print
        }
    }
}

暫無
暫無

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

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