3
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]);
        }

    }
}

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

4

7 回答 7

2

您正在做的是:您正在完全读取文件一次,然后使用相同的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

现在您可以从此列表中添加/删除元素并进行写入。

于 2013-08-29T18:00:16.457 回答
1

这是您想要的代码:

    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.

于 2013-08-29T18:04:14.073 回答
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
}
于 2013-08-29T23:31:19.337 回答
0
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 中没有任何内容可供您阅读,因为您已经在文件的末尾。

于 2013-08-29T18:00:30.290 回答
0

您已经将文件读到末尾以进行计数,您必须关闭并重新打开它才能将阅读器再次定位在文件的开头。

或者,不要使用数组 - 正如@SotiriosDelimanolis 在评论中建议的那样,使用列表。这不需要提前知道长度,你可以添加每一行。

于 2013-08-29T18:01:26.113 回答
0

问题是,当你数完线后,

    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在填充数组之前重新开始读取文件(重新创建 ),或者使用其他方法,例如使用 List 在计数时保留行。

于 2013-08-29T18:01:54.267 回答
0

这是你的问题:

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

该代码正在文件中移动光标,直到它到达末尾。

当你得到这段代码时:

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

光标已经在文件末尾。

相反,请执行以下操作:

    List<String> lines = new ArrayList<String>();
    while ((line = br.readLine()) != null){
        lines.add(line);
        count++;
    }

如果您出于某种原因确实需要将其存储为数组,则可以在最后使用它:

String[] lineArray = lines.toArray(new String[0]);
于 2013-08-29T18:04:36.860 回答