Java读取文件中的整数数组

文件中存储的是这个样子,只有1行(这1行可能很长):

暂认为只会出现这几种字符:

'['
' '
']'
','
[0-9]

即这种样子:

[5344,6022,1787,5553,140,5130,524,3450,4008,721,6154,5598,8219,4614,3404,8232,9023,4552,7711]

考虑用字符流读取。
考虑到整个文件字符可能很多,所以逐个读字符,边读边处理,而不是把所有内容都读到一个字符串中。

定义ArrayList变量list存储最终结果,定义一个StringBuilder变量s用于存储数字。

这里只考虑到这几种情况,其他情况暂不考虑:

  • 遇到 “[” 或者 “ ”(空格),不做任何处理。

  • 遇到数字,则加入s。

  • 遇到 “,” 或者 “]” ,则把s加入list,清空StringBuilder。

代码:

import java.io.*;
import java.util.*;

public class TestData {

    public static void data() {
        List<String> list = new ArrayList<>();
        StringBuilder stringBuilder = new StringBuilder();

        try (
            FileReader fileReader = new FileReader(文件路径)
        ) {
            //每次读取的长度
            int length = 0;
            char[] buffer = new char[20];
            while ((length = (fileReader.read(buffer))) != -1) {
                if (length <= 0) {
                    continue;
                }
                //注意只能处理length个,否则会多算,因为fileReader.read(buffer)如果读取数量小于buffer的大小,那么length后面的也不会覆盖
                for (int i = 0; i < length; i++) {
                    char c = buffer[i];
                    switch (c) {
                        //遇到'[',则说明刚开始读,不用处理。空格也不用处理。
                        case '[':
                        case ' ':
                            break;
                        //遇到','或者']',则说明已读完一个整数。临时串加入list,清空
                        case ',':
                        case ']':
                            //加入list
                            list.add(stringBuilder.toString());
                            //清空stringBuilder
                            stringBuilder.setLength(0);
                            break;
                        //其他情况,说明刚读完一个数字字符。加入临时串
                        default:
                            //加入stringBuilder
                            stringBuilder.append(c);
                    }
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        System.out.println(list);
    }

    public static void main(String[] args) throws IOException {
        data();
    }
}

这里只是每个数字存为字符串,如果有其他需求,需要根据情况修改。
如有错误或其他问题欢迎指正。

你可能感兴趣的:(Java,java)