我的代码应该读取文件并将每行(每条记录)存储到字符串数组中。
我的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);