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]);
}
}
}
我无法将我的数据从文本文件写入我的新数组,数组永远不会被填充。我只需要将这些数据写入数组,然后删除一些项目并吐出新的文本文档
答案 0 :(得分: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
现在您可以添加/删除此列表中的元素并写入。
答案 1 :(得分: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
。
答案 2 :(得分: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
}
答案 3 :(得分: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]);
}
由于您已经在文件的末尾,因此您无需阅读任何内容。
答案 4 :(得分:0)
您已经将文件读到最后进行计数,您必须关闭并重新打开它才能将阅读器再次放在文件的开头。
或者,不要使用数组 - 如@SotiriosDelimanolis在评论中建议的那样,使用列表。这不需要事先知道长度,你可以添加每一行。
答案 5 :(得分: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来保留行。
答案 6 :(得分: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]);