我的代码应该读取文件并将每一行(每个记录)存储到一个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!
(我想要抽象表模型的这个信息)
谢谢。
答案 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);