2014-01-16 1 views
0

Я пытаюсь написать строку JSON в txt-файле, который содержит другие объекты JSON. Структура текстового файла является:Dropbox sync api написать строку в файле JSON

{ 
"array": [ 
    { 
     "id": "1", 
     "owner": "email_string", 
     "title": "title_string", 
     "content": "content_string" 
    }, 
    { 
     "id": "2", 
     "owner": "email_string", 
     "title": "title_string", 
     "content": "content_string" 
    } 
] 
} 

Сейчас в моем коде, я построил новую строку JSON отформатирован для добавления после последнего объекта, но я не знаю, как написать новую строку JSON после последнего JSON и перед символом ']'. Объект DropboxFile имеет метод getInputStream(), getWriteStream(), getAppendStream(). Полагаю, я должен использовать один из них, но я не знаю, как это сделать. Может кто-нибудь мне помочь?

Вот код, где я должен поставить запись:

DbxFileSystem dbxFs; 

dbxFs = DbxFileSystem.forAccount(mDbxAcctMgr.getLinkedAccount()); 

DbxPath path = new DbxPath(NOTE_DB_PATH); 
dbxFs.syncNowAndWait(); 
DbxFile file = dbxFs.open(path); 

String JSONNote = JSONParser.buildJSONNoteString(title, content, currentUserEmail, id)+"\n"; 

// TODO Here I have to find the place to write my JSONNote string 

dbxFs.syncNowAndWait(); 

file.close(); 
dbxFs.shutDown(); 
} catch (DbxException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 

}

РЕШЕНИЕ:

DbxFileSystem dbxFs; 

dbxFs = DbxFileSystem.forAccount(mDbxAcctMgr.getLinkedAccount()); 

DbxPath path = new DbxPath(NOTE_DB_PATH); 
dbxFs.syncNowAndWait(); 
DbxFile file = dbxFs.open(path); 

String JSONNote = JSONParser.buildJSONNoteString(title, content, currentUserEmail, id)+"\n"; 
JSONObject newJsonObj = new JSONObject(JSONNote); 

String dataString = readFile(file); 
JSONObject dataJSON = new JSONObject(dataString); 

dataJSON.accumulate("array", newJsonObj); 

file.writeString(dataJSON.toString()); 

dbxFs.syncNowAndWait(); 
file.close(); 
dbxFs.shutDown(); 

ReadFile() метод:

protected String readFile(DbxFile file) throws DbxException, IOException{ 
    FileInputStream in = file.getReadStream(); 
    int size = in.available(); 
    byte c[] = new byte[size]; 
    for (int i = 0; i < size; i++) { 
     c[i] = (byte) in.read(); 
    } 
    String filedata = new String(c, "utf-8"); 

    in.close(); 
    return filedata; 
} 
+0

вы хотите написать JSONNote подать это правильно –

+0

Да ! но не в конце файла, сразу после последнего объекта JSON – Cardella

+0

вы хотите добавить данные в json-массив, который у вас есть –

ответ

1

Сначала прочитайте файл, используя следующий код

public String readFile(String filepath) throws IOException { 
File f = new File(filepath); 
FileInputStream in = new FileInputStream(f); 
int size = in.available(); 
byte c[] = new byte[size]; 
for (int i = 0; i < size; i++) { 
    c[i] = (byte) in.read(); 
} 
String filedata = new String(c, "utf-8"); 
return filedata;} 

Затем формируют JSONArray, как я посмотрел на ур структуры JSON вы можете сделать это следующим способом

String data = readFile("your filepath"); 

JSONObject data = new JSONObject(data); 

JSONArray newarray = (JSONArray)data.get("array"); 

Затем вы можете использовать «PUT» метод JSONArray и добавьте данные в существующий jsonarray. так что это будет как

newarray.put(index,your_data); 

затем используйте следующий код для записи тех же данных в файл

FileOutputStream fos = new FileOutputStream("your file name", false); 
        PrintStream ps = new PrintStream(fos); 
        ps.append(data.toString()); 

и, надеюсь, вы сделали

+0

Я немного изменил код, но ваше решение было здорово! Спасибо за помощь! – Cardella

Смежные вопросы