读取文件到字符串数组,并显示每条记录



我的代码应该读取文件并将每行(每条记录)存储到字符串数组中。

我的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(因为我有5行),但我看到100 !

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

谢谢。

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

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

修改后的代码:

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

您的data数组将始终是100的大小,因为当您实例化它(String[] data = new String[100])时创建了一个具有100个索引的空白数组。您可以使用List<String>

来代替String[]

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

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

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

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

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

String line;  
int cnt;
cnt = 0;
while((line = br.readLine()) != null){
    System.out.println(line);
    cnt++;
}
br.close();
System.out.println("Data length: "+cnt);

相关内容

  • 没有找到相关文章

最新更新