有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将数据从文件写入数组

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;


public class RF{
    public static void main(String[] args) throws IOException{

        int count = 0;
        FileReader fr = new FileReader("file.txt");
        BufferedReader br = new BufferedReader(fr);
        String line;

        while ((line = br.readLine()) != null){
            //System.out.println(br.readLine());
            count++;
        }
        String []readArray = new String[count];

        for(int i = 0; i < readArray.length; i++){
            readArray[i] = br.readLine();
            System.out.println(readArray[i]);
        }

    }
}

我无法将文本文件中的数据写入新数组,该数组永远不会填充。我只需要将这些数据写入一个数组,然后删除一些项目并生成一个新的文本文档


共 (6) 个答案

  1. # 1 楼答案

    其他人已经解释了你的代码出了什么问题,我只会给出一个不同的选择

    如果您使用的是Java 7,并且您的文件不是太大,那么您可以直接将文件的所有行加载到List

    Path filePath = Paths.get("path to your file");
    try {
        List<String> contentOfTheFile = Files.readAllLines(filePath,
                Charset.defaultCharset());
    } catch (IOException e) {
        //Handle exception here
    }
    
  2. # 2 楼答案

    您已经将文件读到了最后,需要关闭并重新打开它,以便将读取器再次定位到文件的开头

    或者,不要像@SotiriosDelimanolis在评论中建议的那样使用数组,而是使用列表。这不需要预先知道长度,只需添加每一行即可

  3. # 3 楼答案

    问题是,当你数完线

        while ((line = br.readLine()) != null){
            //System.out.println(br.readLine());
            count++;
        }
    

    你没有更多的台词要读

        for(int i = 0; i < readArray.length; i++){
            readArray[i] = br.readLine(); // You've already readed them all
            System.out.println(readArray[i]);
        }
    

    在填充数组之前,需要重新开始读取文件(重新创建BufferedReader),或者使用其他方法,比如在计数时使用列表来保留行

  4. # 4 楼答案

    您所做的是:您正在完全读取文件一次,然后使用相同的BufferedReader再次读取它(在第二个循环中)。因此,在第二个循环中,由于已经到达文件的末尾,所以什么也得不到

    因此,在第一个循环之后,关闭BufferedReader并进行另一个循环。 或者像这样做:

        FileReader fr = new FileReader("file.txt");
        BufferedReader br = new BufferedReader(fr);
        String line;
    
        List<String> list = new ArrayList<String>();
        while ((line = br.readLine()) != null){
            list.add(line);
        }
        br.close();
        // do whatever you have to with this list
    

    现在,您可以在此列表中添加/删除元素并写入

  5. # 5 楼答案

    while ((line = br.readLine()) != null){
        //System.out.println(br.readLine());
        count++;
    }
    

    它将读取您的文件,直到结束,而不会再次放入数据

    在这个循环中再次调用readLine()时

    for(int i = 0; i < readArray.length; i++){
        readArray[i] = br.readLine();
        System.out.println(readArray[i]);
    }
    

    br中没有任何内容可供您阅读,因为您已经在文件末尾

  6. # 6 楼答案

    以下是您想要的代码:

        FileReader fr = new FileReader("file.txt");
        BufferedReader br = new BufferedReader(fr);
        String line;
    
        List<String> strings = new LinkedList<String>();
    
        while ((line = br.readLine()) != null){
            strings.add(line);
        }
    
        for(String string : strings){
            System.out.println(string);
        }
    

    请注意,我使用的不是字符串数组,而是LinkedList