在java

中从文件映射对象 我想从文本文件中映射我的对象,文本文件内容是这样的:
~
attribute1value
attribute2value
attribute3value
attribute4value
attribute5value
attribute6value
~
attribute1value
attribute2value
attribute3value
attribute4value
attribute5value
attribute6value
...continued same 
因此,对于每个5个属性,我想创建新对象并将这6个属性映射到它(这不是问题),问题是我如何在阅读时区分线条,如何获得第一组,第二组等。谢谢     
已邀请:
这是一种更灵活的方法。我们可以指定一个自定义(单行)分隔符,在文件的开头或末尾实际上不需要分隔符(但可以给出),记录的行数是灵活的。数据被解析为一个简单的模型,可用于验证数据和创建最终对象。
private String recordDelimiter = "~";

public static List<List<String>> parse(Reader reader) {

   List<List<String>> result = new ArrayList<List<String>>();
   List<String> record = new ArrayList<String>();
   boolean isFirstLine = true;

   while ((line = reader.readLine()) != null) {

      line = line.trim();

      if (line.length() == 0) {
        continue;  // we skip empty lines
      }

      if (delimiter.equals(line.trim()) {
        if (!isFirstLine) {
          result.add(record);
          record = new ArrayList<String>();
        } else {
          isFirstLine = false;   // we ignore a delimiter in the first line.
        }
        continue;
      } 

      record.add(line);
      isFirstLine = false;
   }

   if (!result.contains(record))
     result.add(record);   // in case the last line is not a separator

   return result;

} 
    
我建议使用Flatworm等第三方实用程序为您处理此问题。     
从这里改编,假设每个对象总有6个属性: 您可以使用java.io.BufferedReader逐行读取文件。
BufferedReader reader = new BufferedReader(new FileReader("/path/to/file.txt"));
String line = null;
int count = 0;
MyObject obj = null;
while ((line = reader.readLine()) != null) {
    if(obj == null) obj = new MyObject();
    if(count <= 6) {
      switch(count) {
        case 0: // ignore: handles '~'
          break;
        case 1: // assign value of line to first property, like:
          obj.prop1 = line;
          break;
        // etc up to case 6
      }
      count++;
    } else {
      // here, store object somewhere, then...
      obj = null;
      count = 0;
    }
}
    
原始代码,无异常处理,需要100%完美的文件结构和以记录分隔符'〜'结尾的文件。 给你一个开始。
public class Record {

    private String field1 = null;
    private String field2 = null;
    private String field3 = null;
    private String field4 = null;
    private String field5 = null;
    private String field6 = null;

    private void read(DataInputStream din) throws IOException, ClassNotFoundException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(din));

        field1 = reader.readLine();
        field2 = reader.readLine();
        field3 = reader.readLine();
        field4 = reader.readLine();
        field5 = reader.readLine();
        field6 = reader.readLine();

        reader.readLine(); // Skip separator line "~".
    }


    private static void main(String[] args) throws IOException, ClassNotFoundException {
       FileInputStream fin = new FileInputStream("C:\file.dat");
       DataInputStream din = new DataInputStream(fin);
       Collection<Record> records = new LinkedList<Record>();

       while(0 < din.available()) {
           Record record = new Record();
           record.read(din);

           records.add(record);
       }

    }
}
    

要回复问题请先登录注册