读入多个文件和数组列表

时间:2017-08-02 12:06:06

标签: java arrays file arraylist

我想将文件中的每一行保存到数组列表中。 当我只有一个文件它工作正常,但如果我读取多个文件,每个文件的第一行都保存在同一个数组... 代码:

public static void main(String[] args) 
{
    File folder = new File("\\Documents\\Files");
    File[] listOfFiles = folder.listFiles();

    for(File file : listOfFiles) {
       dosomething(file);
    }
}

public static void dosomething(File file)
{
    try {
        List<String[]> lines = new ArrayList<>();
        BufferedReader reader = new BufferedReader(new FileReader(file));
        String[] tmp;
        String line;

        while ((line = reader.readLine()) != null) {
            tmp = line.split("\n");
            if (tmp.length > 0) {
                lines.add(tmp);
            }

        }

        reader.close();
        System.out.println(lines.get(0)); 

    }
    ....
}

结果:

[Ljava.lang.String;@15db9742
[Ljava.lang.String;@6d06d69c
[Ljava.lang.String;@7852e922

在我的文件夹“files”中,我有3个file.txt,每个文件都包含文本行。 所以我想将每个文件的每一行保存到一个新的数组中。但为什么我没有3行保存而不是1行呢?

有人能帮忙吗?

感谢

现在我尝试了这种方式:

public static String [] stringArr;
    public static void main(String[] args) 
    {
        File folder = new File("\\Documents\\Files");
            File[] listOfFiles = folder.listFiles();

            for(File file : listOfFiles) {
                dosomething(file);
        }
         List<String> lines = new ArrayList<>();

            for(String s : stringArr)
            {
                lines.add(s);
            }

            for(String t : lines)
            {
                System.out.println(t);
             }
    }
    public static void dosomething(File file)
    {
        try {
            List<String> list= new ArrayList<>();
            BufferedReader in = new BufferedReader(new FileReader(file));
            String str;
                    while((str = in.readLine()) != null){
                            list.add(str);
                    }
                    stringArr = list.toArray(new String[0]);

                    }
                    reader.close();
            }

结果:如果在dosomthing方法中执行stringArr的for循环,每个文件的每个内容都完全保存在我的stringArr ....但是现在如果我在Main-methode中执行for循环我只是得到了内容一个文件回来......

1 个答案:

答案 0 :(得分:0)

首先,您不需要存储行的数组列表,但可以简单地存储在String中。 所以

for(String string : lines ){
    System.out.println(string);
}

足以满足将文件中的行存储到arraylist中的需要。

要打印列表中的行,您可以遍历列表并打印它们。

String[] stringArr
OP编辑问题后

编辑

1.为什么再次使用public List<String> globalList; public static void main(String[] args) { globalList=newArrayList<String>(); File folder = new File("\\Documents\\Files"); File[] listOfFiles = folder.listFiles(); for(File file : listOfFiles) { dosomething(file); } for(String t : globalList) { System.out.println(t); } } public static void dosomething(File file) { try { BufferedReader in = new BufferedReader(new FileReader(file)); String str; while((str = in.readLine()) != null){ globalList.add(str); } } reader.close(); } 而是将其用作列表并为其添加行。我看到你的全部意图是将所有三个文件的行存储在一个列表(或数组)中,用于一次打印所有文件

in ./app/index.tsx
Module build failed: TypeError: Cannot convert undefined or null to object
at hasOwnProperty (<anonymous>)
at Object.hasProperty (C:\Users\sjb3\docs\NIST-CT\StriDE\node_modules\typescript\lib\typescript.js:2229:31)
at parseConfig (C:\Users\sjb3\docs\NIST-CT\StriDE\node_modules\typescript\lib\typescript.js:71815:16)
at C:\Users\sjb3\docs\NIST-CT\StriDE\node_modules\typescript\lib\typescript.js:71721:22
at Object.parseJsonConfigFileContent (C:\Users\sjb3\docs\NIST-CT\StriDE\node_modules\typescript\lib\typescript.js:71735:11)
at readConfigFile (C:\Users\sjb3\docs\NIST-CT\StriDE\node_modules\awesome-typescript-loader\src\instance.ts:324:33)
at Object.ensureInstance (C:\Users\sjb3\docs\NIST-CT\StriDE\node_modules\awesome-typescript-loader\src\instance.ts:101:9)
at compiler (C:\Users\sjb3\docs\NIST-CT\StriDE\node_modules\awesome-typescript-loader\src\index.ts:47:22)
at Object.loader (C:\Users\sjb3\docs\NIST-CT\StriDE\node_modules\awesome-typescript-loader\src\index.ts:16:18)
@ multi webpack-hot-middleware/client react-hot-loader/patch ./app/index.tsx