我正在尝试从.txt文件中读取数据。格式如下:
ABC, John, 123
DEF, Mark, 456
GHI, Mary, 789
我试图摆脱逗号并将数据放入数组或结构(最有可能的结构)。
这是我用来提取每个项目的代码:
package prerequisiteChecker;
import java.util.*;
import java.io.*;
public class TestUnit {
public static void main(String[]args){
try {
FileInputStream fstream = new FileInputStream("courses.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null) {
String[] splitOut = strLine.split(", ");
for (String token : splitOut)
System.out.println(token);
}
in.close();
} catch (Exception e){
System.err.println("Error: " + e.getMessage());
}
}
}
有一次,我在“while”循环中有一个打印行,看看是否会分割这些项目。他们是。现在我对下一步做什么感到茫然。我正在尝试将每个分组放入一个结构中。例如:ID - ABC。名字 - 约翰。房间 - 123。
我在家里有几本关于Java的书,并尝试环顾网络。那里有很多东西,似乎没有一个能让我朝着正确的方向前进。
感谢。
迈克尔
答案 0 :(得分:0)
创建一个看起来像这样的类:
class structure {
public String data1;
public String data2;
public String data3;
}
这将形成您的基本数据结构,您可以使用它来保存您在问题中提到的数据类型。现在,您可能希望遵循适当的面向对象的方法,例如将所有字段声明为私有,以及写入getter和setter。你可以在这里找到更多... http://java.dzone.com/articles/getter-setter-use-or-not-use-0
现在,在while循环之外,创建一个这样的ArrayList:ArrayList<structure> list = new ArrayList<structure>();
这将用于保存您将要解析的所有不同数据行。
现在,在你的while循环中执行以下操作:
structure item = new structure();//create a new instance for each row in the text file.
item.data1 = splitOut[0];
item.data2 = splitOut[1];
item.data3 = splitOut[2];
list.add(item);
这将基本上获取您在每一行中解析的数据,通过为每个被解析的新行创建一个新实例来声明您声明的数据结构。最后,使用代码中的list.add(item)
在ArrayList中插入该数据项,如上所示。
答案 1 :(得分:0)
我会创建一个很好的结构来存储你的信息。我不确定您是否想要访问数据,但这是一个很好的例子。我会放弃你之前放的东西。请注意,我只是将变量公之于众,因为它们是最终的。一旦你完成课程,他们就无法改变。如果您希望课程可变,请创建getter和setter并将实例变量更改为private。之后,您可以使用该列表来检索您想要的任何课程。
package prerequisiteChecker;
import java.util.*;
import java.io.*;
public class TestUnit {
public static void main(String[] args) {
try {
FileInputStream fstream = new FileInputStream("courses.txt");
// use DataInputStream to read binary NOT text
// DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
List<Course> courses = new LinkedList<Course>();
while ((strLine = br.readLine()) != null) {
String[] splitOut = strLine.split(", ");
if (splitOut.length == 3) {
courses.add(new Course(splitOut[0], splitOut[1],
splitOut[2]));
} else {
System.out.println("Invalid class: " + strLine);
}
}
in.close();
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
}
public static class Course {
public final String _id;
public final String _name;
public final String _room;
public Course(String id, String name, String room) {
_id = id;
_name = name;
_room = room;
}
}
}
答案 2 :(得分:0)
public class File_ReaderWriter {
private static class Structure{
public String data;
}
public static void main(String[] args) throws IOException{
String allDataString;
FileInputStream fileReader = new FileInputStream ("read_data_file.txt");
DataInputStream in = new DataInputStream(fileReader);
BufferedReader bufferReader = new BufferedReader(new InputStreamReader(in));
String[] arrayString = {"ID - ", " NAME - ", " ROOM - "};
int recordNumber = 0;
Structure[] structure = new Structure[10];
for (int i = 0; i < 10; i++)
structure[i] = new Structure();
while((allDataString = bufferReader.readLine()) != null){
String[] splitOut = allDataString.split(", ");
structure[recordNumber].data = "";
for (int i = 0; i < arrayString.length; i++){
structure[recordNumber].data += arrayString[i] + splitOut[i];
}
recordNumber++;
}
bufferReader.close();
for (int i = 0; i < recordNumber; i++){
System.out.println(structure[i].data);
}
}
}
我修改了你给定的代码。有用。尝试一下,如果有任何疑问,请询问。