Java 如何通过读取文本文件创建项目对象?
我试图从文本文件中读取数据,并用它创建项对象。 项对象具有字段String title、String format、boolean onLoan、String loanedTo和String dateLoaned。在save()方法中,我将每个对象打印到一个文本文件的新行中,字段用“$”(美元符号)分隔。如何逐行读取文本文件,并从每行创建一个新对象并将其添加到数组中 文本文件示例: 星战$DVD$false$null$null 外星人$Bluray$true$John$MondayJava 如何通过读取文本文件创建项目对象?,java,Java,我试图从文本文件中读取数据,并用它创建项对象。 项对象具有字段String title、String format、boolean onLoan、String loanedTo和String dateLoaned。在save()方法中,我将每个对象打印到一个文本文件的新行中,字段用“$”(美元符号)分隔。如何逐行读取文本文件,并从每行创建一个新对象并将其添加到数组中 文本文件示例: 星战$DVD$false$null$null 外星人$Bluray$true$John$Monday public
public void save() {
String[] array2 = listForSave();
PrintWriter printer = null;
try {
printer = new PrintWriter(file);
for (String o : array2) {
printer.println(o);
}
printer.close();
} catch ( IOException e ) {
e.printStackTrace();
}
}
public void open(){
try{
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
StringBuffer stringBuffer = new StringBuffer();
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append(line);
stringBuffer.append("\n");
}
fileReader.close();
System.out.println("Contents of file:");
System.out.println(stringBuffer.toString());
}catch ( IOException e ) {
e.printStackTrace();
}
}
谢谢大家。这是我的最终代码:
public void open(){
try{
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line;
String[] strings;
while ((line = bufferedReader.readLine()) != null) {
strings = line.split("\\$");
String title = strings[0];
String format = strings[1];
boolean onLoan = Boolean.parseBoolean(strings[2]);
String loanedTo = strings[3];
String dateLoaned = strings[4];
MediaItem superItem = new MediaItem(title,format, onLoan,loanedTo,dateLoaned);
items.add(superItem);
}
fileReader.close();
}catch ( IOException e ) {
e.printStackTrace();
}
}
您可以尝试“解析”文件的每一行
String[] result = "StarWars$DVD$false$null$null".split("\\$");
for (int i=0; i<result.length; i++) {
String field = result[i]
... put the strings in your object ...
}
String[]result=“StarWars$DVD$false$null$null”。拆分(\\$”;
对于(inti=0;i快速脏的解决方案可能是
public void open(){
try{
ArrayList<Item> list = new ArrayList<Item>(); //Array of your ItemObject
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
StringBuffer stringBuffer = new StringBuffer();
String line;
while ((line = bufferedReader.readLine()) != null) {
Item itm = new Item(); //New Item Object
String [] splitLine = line.split("\\$");
item.title = splitLine[0];
item.format = splitLine[1];
item.onLoan = Boolean.parseBoolean(splitLine[2]);
item.loanedTo = splitLine[3];
item.dateLoaned = splitLine[4];
list.add(itm);
stringBuffer.append(line);
stringBuffer.append("\n");
}
fileReader.close();
System.out.println("Contents of file:");
System.out.println(stringBuffer.toString());
}catch ( IOException e ) {
e.printStackTrace();
}
}
public void open(){
试一试{
ArrayList=新建ArrayList();//ItemObject的数组
FileReader FileReader=新的FileReader(文件);
BufferedReader BufferedReader=新的BufferedReader(文件阅读器);
StringBuffer StringBuffer=新的StringBuffer();
弦线;
而((line=bufferedReader.readLine())!=null){
Item itm=new Item();//新建Item对象
String[]splitLine=line.split(\\$);
item.title=拆分行[0];
item.format=拆分行[1];
item.onLoan=Boolean.parseBoolean(拆分行[2]);
item.loanedTo=拆分行[3];
item.dateLoaned=拆分行[4];
列表。添加(itm);
stringBuffer.append(行);
stringBuffer.append(“\n”);
}
fileReader.close();
System.out.println(“文件内容:”);
System.out.println(stringBuffer.toString());
}捕获(IOE异常){
e、 printStackTrace();
}
}
但如果您需要重新排列或添加新字段,这将无法扩展
String line = // input line e.g. "Aliens$Bluray$true$John$Monday"
String[] strings = line.split("\\$"); // use regex matching "$" to split
String title = strings[0];
String formatt = strings[1];
boolean onLoan = Boolean.parseBoolean(strings[2]);
String loanedTo = strings[3];
String dateLoaned = strings[4];
// TODO: create object from those values
可能您需要以不同的方式处理null
(如果您希望字符串“null”
转换为null
),请注意,您无法区分是保存了null
还是“null”
此函数将“null”
转换为null
,否则返回相同的字符串:
String convert(String s) {
return s.equals("null") ? null : s;
}
将对象读入数组
由于在阅读所有行之前,您不知道元素的数量,因此必须解决以下问题:
将文件中的对象数写为第一行,这将允许您在读取第一个对象之前创建数组。(使用Integer.parseInt(String)
将第一行转换为int):
或
使用集合
,例如数组列表
存储对象并使用获取数组
谢谢您的回答,但是我的文本文件可以更改,并且可能并不总是包含相同的数据。如何使用String line=…使其自动读取everyline?
public void save() {
String[] array2 = listForSave();
PrintWriter printer = null;
try {
printer = new PrintWriter(file);
printer.println(array2.length);
for (String o : array2) {
printer.println(o);
}
printer.close();
} catch ( IOException e ) {
e.printStackTrace();
}
}
public void open(){
try{
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
StringBuffer stringBuffer = new StringBuffer();
int arraySize = Integer.parseInt(stringBuffer.readLine());
Object[] array = new Object[arraySize];
int index = 0;
String line;
while ((line = bufferedReader.readLine()) != null) {
// split line and create Object (see above)
Object o = // ...
array[index++] = o;
}
//...
}catch ( IOException e ) {
e.printStackTrace();
}
//...
}