将文件读取到String数组并显示每条记录

时间:2013-01-05 19:23:23

标签: java arrays file

我的代码应该读取文件并将每一行(每个记录)存储到一个String数组中。

我的txt文件是:

FName Lname Number
second secondsecond 22
thired thithird 33
fourth fourfourr 44
fifth fiffif 55

但是,当我运行我的代码时,我的程序不会显示每行的第一个字符! 显示如下:

econd secondsecond 22
hired thithird 33
ourth fourfourr 44
ifth fiffif 55

我的代码:

public class ReadfileIntoArray {

String[] columns=new String[]  {"FName","Lname","Number"};
String[] data=new String[100];

public void read() throws IOException{
FileReader fr=new FileReader("D:\\AllUserRecords.txt");
BufferedReader br=new BufferedReader(fr);
String line;  

while((line=br.readLine())!=null){

    for(int i=0;i<=br.read();i++){
        data[i]=br.readLine();
        System.out.println(data[i]);
    }
    }  
br.close();
System.out.println("Data length: "+data.length);
}

public static void main(String[] args) throws IOException{
    ReadfileIntoArray rfta=new ReadfileIntoArray();
    rfta.read();
}
}

我希望看到数据长度:5(因为我有五行),但我看到100!

(我想要抽象表模型的这个信息)

谢谢。

6 个答案:

答案 0 :(得分:2)

因为您在第二行声明了数组大小为100。那么如何基本上有两个选项,如果文件中的行数不会改变,那么将数组的大小声明为5.如果它会变化,那么我建议你使用例如ArrayList

List<String> data = new ArrayList<String>();
//in the while loop
data.add(br.readLine());

答案 1 :(得分:1)

您的data数组总是大小为100,因为当您实例化它(String[] data = new String[100])时会创建一个包含100个索引的空白数组。您可以使用String[]

,而不是使用List<String>

答案 2 :(得分:1)

您的代码已修改:

public class ReadfileIntoArray {

    String[] columns = new String[] { "FName", "Lname", "Number" };
    String[] data = new String[100];

    public void read() throws IOException {
        FileReader fr = new FileReader("D:\\AllUserRecords.txt");
        BufferedReader br = new BufferedReader(fr);
        String line;

        int i = 0;
        while ((line = br.readLine()) != null) {
            data[i] = line;
            System.out.println(data[i]);
            i++;
        }
        br.close();
        // This is for resize the data array (and data.length reflect new size)
        String[] dataNew = new String[i];
        System.arraycopy(data, 0, dataNew, 0, i);
        data = dataNew;
        System.out.println("Data length: " + data.length);
    }

    public static void main(String[] args) throws IOException {
        ReadfileIntoArray rfta = new ReadfileIntoArray();
        rfta.read();
    }
}

答案 3 :(得分:0)

br.read()正在从每行的开头读取一个字符,留下br.readLine()来阅读其余字符。

这个内循环毫无意义。

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

这应该是你所需要的。如果您不想要第一行,请在循环之前添加对br.readLine()的附加调用。

int i = 0;
while((line=br.readLine())!=null){
    data[i] = line;
    System.out.println(line);
    i++;
}  

如果您不知道要预期多少行,您还应尝试使用动态大小的数据结构来存储字符串(例如ArrayList<String>)。然后,您可以使用myList.size()来获取行数。

List myList = new ArrayList<String>();
while((line=br.readLine())!=null){
    myLine.add(line);
    System.out.println(line);
}  

System.out.println(myList.size());

//Retrieve the data as a String[].
String[] data = (String[]) myList.toArray();

答案 4 :(得分:0)

在读取行的循环内部,使用String方法split来处理每一行。不要从阅读器中提取,因为它在读取时将文件指针向前移动。您可以使用

拆分空白
String [] parts = stringName.split("\\s");

然后您可以完全访问每行中的所有三个项目。

答案 5 :(得分:0)

为什么如此复杂? 以下是我的解决方案,供参考。

String line;  
int cnt;

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

br.close();
System.out.println("Data length: "+cnt);