13

所有,我现在面临着不知道将文本文件中的内容存储到数组中的问题。情况就像,文本文件内容:

abc1
xyz2
rxy3

我希望将它们逐行存储到数组中,这可能吗?我期望的是这样的:

arr[0] = abc1
arr[1] = xyz2
arr[2] = rxy3

我尝试过这样的事情,但似乎不适合我。如果有人可以帮助我,真的非常感谢。

代码是:

BufferedReader in = new BufferedReader(new FileReader("path/of/text"));
        String str;

        while((str = in.readLine()) != null){
            String[] arr = str.split(" ");
            for(int i=0 ; i<str.length() ; i++){
                arr[i] = in.readLine();
            }
        }
4

11 回答 11

24

我建议使用ArrayList处理动态大小的 ,而数组将需要预先定义的大小,您可能不知道。您始终可以将列表重新转换为数组。

BufferedReader in = new BufferedReader(new FileReader("path/of/text"));
String str;

List<String> list = new ArrayList<String>();
while((str = in.readLine()) != null){
    list.add(str);
}

String[] stringArr = list.toArray(new String[0]);
于 2013-04-19T08:16:22.620 回答
13

最简单的解决方案:

List<String> list = Files.readAllLines(Paths.get("path/of/text"), StandardCharsets.UTF_8);
String[] a = list.toArray(new String[list.size()]); 

请注意,java.nio.file.Files 是从 1.7 开始的

于 2013-04-19T08:21:14.950 回答
3

这应该有效,因为它使用 List 因为您不知道文件中有多少行,而且它们以后可能会更改。

BufferedReader in = new BufferedReader(new FileReader("path/of/text"));
String str=null;
ArrayList<String> lines = new ArrayList<String>();
while((str = in.readLine()) != null){
    lines.add(str);
}
String[] linesArray = lines.toArray(new String[lines.size()]);
于 2013-04-19T08:20:23.703 回答
3

爪哇8:

Files.lines(new File("/home/abdennour/path/to/file.txt").toPath()).collect(Collectors.toList());
于 2015-06-11T07:18:47.323 回答
2

你需要为你的情况做这样的事情: -

int i = 0;
while((str = in.readLine()) != null){
    arr[i] = str;
    i++;
}

但请注意,arr应根据文件中的条目数正确声明 。

建议:-改用 a List(查看@Kevin Bowersox的帖子)

于 2013-04-19T08:17:15.147 回答
2

只需使用Apache Commons IO

List<String> lines = IOUtils.readLines(new FileInputStream("path/of/text"));
于 2013-04-19T08:20:27.583 回答
1

当您将str = in.readLine()) != null一行读入str变量时,如果它不为空,则执行该while块。您无需再阅读arr[i] = in.readLine();. 当您不知道输入文件的确切大小(行数)时,也可以使用列表而不是数组。

BufferedReader in = new BufferedReader(new FileReader("path/of/text"));
String str;

List<String> output = new LinkedList<String>();

while((str = in.readLine()) != null){
    output.add(str);
}

String[] arr = output.toArray(new String[output.size()]);
于 2013-04-19T08:17:57.553 回答
1

尝试这个:

String[] arr = new String[3];// if size is fixed otherwise use ArrayList.
int i=0;
while((str = in.readLine()) != null)          
    arr[i++] = str;

System.out.println(Arrays.toString(arr));
于 2013-04-19T08:16:38.163 回答
1

您可以使用此完整代码来解决您的问题。有关更多详细信息,您可以在appucoder.com上查看

class FileDemoTwo{
    public static void main(String args[])throws Exception{
        FileDemoTwo ob = new FileDemoTwo();
        BufferedReader in = new BufferedReader(new FileReader("read.txt"));
        String str;
        List<String> list = new ArrayList<String>();
        while((str =in.readLine()) != null ){
            list.add(str);
        }
        String[] stringArr = list.toArray(new String[0]);
        System.out.println(" "+Arrays.toString(stringArr)); 
    }

}
于 2016-11-23T09:16:52.790 回答
0

建议为此使用 Apache IOUtils.readLines。请参阅下面的链接。

http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/IOUtils.html

于 2013-04-19T12:29:13.303 回答
0

您可以使用此代码。这工作非常快!

public String[] loadFileToArray(String fileName) throws IOException {
    String s = new String(Files.readAllBytes(Paths.get(fileName)));
    return Arrays.stream(s.split("\n")).toArray(String[]::new);
}
于 2020-07-26T11:26:37.923 回答