从inputstream创建一个只读的字符串arraylist

时间:2014-04-18 04:20:09

标签: java

我一直在尝试将输入流中的字符串存储到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. 参数列表的非法修饰符,仅允许最终
  2.   
  3. 类型安全:类型List的表达式需要未经检查的转换以符合List
  4.   

请告诉我哪里错了?

4 个答案:

答案 0 :(得分:0)

如果您在方法static内部使用并且public类型不允许用于局部变量删除类型

这样做

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

答案 1 :(得分:0)

我们来看看。首先,关键字静态公开只能应用于类字段(如果讨论数据而不是方法),而不能应用于局部变量。

关于最终关键字,可以说几句话。在Java中有两种类型:基元(int,float,double等)和引用。如果将final关键字应用于基本类型变量,它实际上可以保护它不被更改。

对于参考类型,它更复杂。 E.g:

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

您无法更改列表变量(这是对实际列表的引用),但您可以修改列表本身。如果要保护列表不被修改,可以使用 unmodifiableList 方法:

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

答案 2 :(得分:0)

Collections.unmodifiableList中,您可以直接传递Arrays.asList,因为它会为您提供一个列表。 无需再次使用ArrayList实例包装。

此外,还没有对新创建的列表进行引用。

你可以这样做:

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

Arrays.asList,您无法添加或删除元素。

通过不可修改的列表,您无法使用内部列表中的setter方法添加,删除或修改

答案 3 :(得分:0)

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
        }
    }
}