2017-10-24 38 views
-1

注:この質問は、私が助けが必要なものを明確にするために改められています。テキストファイルから埋め込みリストを読み込むJava

私はテキストファイルでこれを持っている:

[[0.0, 0.0, 1], [32.0, 0.0, 1], [64.0, 0.0, 1], [96.0, 0.0, 1], [128.0, 0.0, 1]] 

私が行って、それを文字列としてでロードします。これを返す

public void loadWorld() 
{ 
    FileHandle path = Gdx.files.local("saves/tileList.txt"); 

    String tmpString = path.readString(null); 
    List<String> tmpList = new ArrayList<String>(Arrays.asList(tmpString.split("],"))); 
    System.out.println(tmpString); 

} 

を:

[[[0.0, 0.0, 1, [32.0, 0.0, 1, [64.0, 0.0, 1, [96.0, 0.0, 1, [128.0, 0.0, 1]]] 

は、任意のはあります私はちょうど文字列を取って文字列の埋め込みリストにキャストすることができますか?

あなたが使用することができるテキストを読み込んだ後にPythonでast.literal_eval(tmpString)

私は使用できるJava同等のものはありますか?ここで

は機能を救うである:ここでは

public void saveWorld() 
{ 
    FileHandle path = Gdx.files.local("saves/tileList.txt"); 

    List<List<String>> tmpArray = new ArrayList<List<String>>(); 
    List<String> tmpList = new ArrayList<String>(); 

    for (Tile t: tiles) 
    { 
     tmpList = new ArrayList<String>(); 
     tmpList.add(String.valueOf(t.getX())); 
     tmpList.add(String.valueOf(t.getY())); 
     tmpList.add(String.valueOf(t.getType())); 
     tmpArray.add(tmpList); 
     path.writeString(String.valueOf(tmpArray) + "\n", false); 
    } 

    path = Gdx.files.local("saves/itemList.txt"); 
    tmpArray = new ArrayList<List<String>>(); 

    for (Item i: items) 
    { 
     tmpList = new ArrayList<String>(); 
     tmpList.add(String.valueOf(i.getX())); 
     tmpList.add(String.valueOf(i.getY())); 
     tmpList.add(String.valueOf(i.getType())); 
     tmpList.add(String.valueOf(i.getIsCollected())); 
     tmpArray.add(tmpList); 
     path.writeString(String.valueOf(tmpArray), false); 
    } 

    path = Gdx.files.local("saves/spriteList.txt"); 
    tmpArray = new ArrayList<List<String>>(); 

    for (Sprite s: sprites) 
    { 
     tmpList = new ArrayList<String>(); 
     tmpList.add(String.valueOf(s.getX())); 
     tmpList.add(String.valueOf(s.getY())); 
     tmpList.add(String.valueOf(s.getHealth())); 
     tmpList.add(String.valueOf(s.getMaxHealth())); 
     tmpList.add(String.valueOf(s.getMana())); 
     tmpList.add(String.valueOf(s.getMaxMana())); 
     tmpList.add(String.valueOf(s.getSpeed())); 
     tmpList.add(String.valueOf(s.getArmour())); 
     tmpList.add(String.valueOf(s.getDamage())); 
     tmpList.add(String.valueOf(s.getHealthRegenRate())); 
     tmpList.add(String.valueOf(s.getManaRegenRate())); 
     tmpArray.add(tmpList); 
     path.writeString(String.valueOf(tmpArray), false); 
    } 

} 
+0

これまでに何を試しましたか?どのようにそれらを読むのですか? –

+0

FileHandle path = Gdx.files.local( "saves/tileList.txt"); \t 文字列tmpString = path.readString(null); – QuickJAB

答えて

0

は、JSONとしてあなたのネストされたリストをシリアル化するためにジャクソンを使った例です:

import java.util.ArrayList; 
import java.util.List; 

class EmbeddedList 
{ 
    private List<List<Double>> list = new ArrayList<>(); 
    public List<List<Double>> getList() 
    { 
     return list; 
    } 
} 

とシリアライザ:

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStreamWriter; 
import java.io.PrintWriter; 
import java.util.ArrayList; 
import java.util.List; 

import com.fasterxml.jackson.databind.ObjectMapper; 


public class EmbeddedListSerializer 
{ 


public static void main(String[] args) 
{ 
    EmbeddedList saveMe = new EmbeddedList(); 
    List<Double> firstList = new ArrayList<>(); 
    firstList.add(0.0); 
    firstList.add(0.0); 
    firstList.add(1d); 

    List<Double> secondList = new ArrayList<>(); 
    secondList.add(32.0); 
    secondList.add(0.0); 
    secondList.add(1d); 

    List<Double> thirdList = new ArrayList<>(); 
    thirdList.add(64.0); 
    thirdList.add(0.0); 
    thirdList.add(1d); 

    saveMe.getList().add(firstList); 
    saveMe.getList().add(secondList); 
    saveMe.getList().add(thirdList); 

    EmbeddedListSerializer serializer = new EmbeddedListSerializer(); 
    serializer.saveJson(saveMe); 

    EmbeddedList loaded = serializer.loadJson(); 
    for(List<Double> subList : loaded.getList()) 
    { 
     for(Double d : subList) 
     { 
      System.out.println(d); 
     } 
    } 
} 

public void saveJson(EmbeddedList embeddedList) 
{ 
    ObjectMapper mapper = new ObjectMapper(); 
    try 
    { 
     String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(embeddedList); 
     OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream("list.json")); 
     PrintWriter out = new PrintWriter(outputStreamWriter); 
     PrintWriter writer = new PrintWriter(out); 
     writer.print(json); 
     writer.close(); 

    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
} 

private EmbeddedList loadJson() 
{ 
    EmbeddedList list = null; 
    try 
    { 
     ObjectMapper mapper = new ObjectMapper(); 
     File file = new File("list.json"); 
     list = mapper.readValue(file, EmbeddedList.class); 
    } 
    catch(IOException e) 
    { 
     e.printStackTrace(); 
    } 
    return list; 
} 

}

どのように、データを保存する:あなたは、EmbeddedListオブジェクトの数にダブルを変更したい場合は、ダブルスはint型としてダブル、int型としてシリアル化され

{ 
    "list" : [ [ 0.0, 0.0, 1.0 ], [ 32.0, 0.0, 1.0 ], [ 64.0, 0.0, 1.0 ] ] 
} 

+2

投稿(50?)にコメントするために必要な担当者についてはわかりませんが、このような回答は投稿しないでください。 – notyou

+0

Repが必要です50私は答えを –

+0

と編集しました。 – TeeBea

関連する問題