Java 如何通过读取文本文件创建项目对象?

Java 如何通过读取文本文件创建项目对象?,java,Java,我试图从文本文件中读取数据,并用它创建项对象。 项对象具有字段String title、String format、boolean onLoan、String loanedTo和String dateLoaned。在save()方法中,我将每个对象打印到一个文本文件的新行中,字段用“$”(美元符号)分隔。如何逐行读取文本文件,并从每行创建一个新对象并将其添加到数组中 文本文件示例: 星战$DVD$false$null$null 外星人$Bluray$true$John$Monday public

我试图从文本文件中读取数据,并用它创建项对象。 项对象具有字段String title、String format、boolean onLoan、String loanedTo和String dateLoaned。在save()方法中,我将每个对象打印到一个文本文件的新行中,字段用“$”(美元符号)分隔。如何逐行读取文本文件,并从每行创建一个新对象并将其添加到数组中

文本文件示例:

星战$DVD$false$null$null

外星人$Bluray$true$John$Monday

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