【问题标题】:Read in mulitple Files and Array List读入多个文件和数组列表
【发布时间】:2018-01-09 15:42:30
【问题描述】:

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

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

在我的文件夹“文件”中,我有 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 方法中执行 for 循环,我只会得到内容一个文件回来...

【问题讨论】:

  • 你需要正确打印数组
  • 另请查看Files.readAllLines
  • 你可以把ArrayList放在main中,因为每次进入方法都会创建一个新的,所以对于每个文件
  • 你不应该 line.split("\n") ,因为 reader.readLine() 已经在为你做这件事了
  • 你创建的每个迭代 arraylistarray 这就是你得到三个的原因。您需要做的是在 main 中创建列表和数组,并读取数组中设置的所有文本并添加到列表中。您可以打印System.out.println(Arrays.toString(lines.get(0)));

标签: java arrays file arraylist


【解决方案1】:

首先,您不需要数组列表来存储行,而是可以简单地存储在字符串中。 所以

List<String> lines=new ArrayList<String>();
BufferedReader reader = new BufferedReader(new FileReader(file));
    String line;

    while ((line = reader.readLine()) != null) {
        lines.add(tmp);
    }

足以将文件中的行存储到您的数组列表中。

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

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

EDIT OP 编辑​​问题后

1.为什么要再次使用String[] stringArr 而不是将其用作列表并在其中添加行。我看到你的全部意图是将所有三个文件的行存储在一个列表(或数组)中,用于一次打印它们

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();
 }

【讨论】:

  • 是的,我现在已经改变了这一点,但问题是如果我在 Main 方法中使用我的 Saved 数组 public static String [] stringArr; 我只保存了一个文件内容,如果我在 for(String out : stringArr){System.out.println(out);我的 dosomthing 方法,然后我将所有内容都保存在这个数组中......
  • 但是你为什么要一个 stringArr = list.toArray(new String[0]);
  • 因为我很愚蠢 xD 非常感谢先生!现在它的工作
  • 如果你接受正确的建议并遵循它们,而不是总是按照你的方法行事,那就永远不要愚蠢
  • =) 谢谢,祝您愉快!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-26
相关资源
最近更新 更多