当然可以,只要读和写时保持一样就可以了,可以用流的形式,也可以用文本文件的形式保存,文本的话最好是每一项都一行,不要把多项写在同一行,因为你的分隔很可能就是ListView里正常的文本//保存到文件procedure TForm1.Button1Click(Sender: TObject);var i, j: integer; List: TStrings;begin //第一行标题 //第一行图片索引 //第一行项数 // 子项1 // 子项2 // 子项n //第二行标题 //第二行图片索引 //第二行项数 // 子项1 // 子项2 // 子项n //第N行标题 //第N行图片索引 //第N行项数 // 子项1 // 子项2 // 子项n List:= TStringList.Create; try List.Clear; with ListView1 do begin for i:= 0 to Items.Count-1 do begin List.Add(Items.Caption); List.Add(IntToStr(Items.ImageIndex)); List.Add(IntToStr(Items.SubItems.Count)); for j:= 0 to Items.SubItems.Count-1 do begin List.Add(Items.SubItems[j]); end; end; end; List.SaveToFile('ListView1.txt'); finally List.Free; end;end;//从文件中读取procedure TForm1.Button2Click(Sender: TObject);var i, j, Count: integer; List: TStrings; ListItem: TListItem;begin List:= TStringList.Create; try List.LoadFromFile('ListView1.txt'); i:= 0; ListView1.Clear; while List.Count > 0 do begin ListItem:= ListView1.Items.Add; //标题 ListItem.Caption:= List[0]; List.Delete(0); //图片索引 ListItem.ImageIndex:= StrToInt(List[0]); List.Delete(0); //字项 Count:= StrToInt(List[0]); for j:= 0 to Count - 1 do begin ListItem.SubItems.Add(List[0]); List.Delete(0); end; end; finally List.Free; end;end;