मैं पहले outputStream.writeObject और डिफ़ॉल्ट लेखक/रीडर के साथ Serializable उपयोग कर रहा था ऑब्जेक्ट डेटा को सहेजने के लिए। कोड स्थिरता के साथ समस्याओं की वजह से मैं कुछ और के बाद किया गया है। यह परिणाम है। वह BufferedWriter अनिवार्य है, अन्यथा गति लिखने 8 बार ड्रॉप। ध्यान दें कि यूटीएफ -8 घोषणा जो default encoding of Json है। सुनिश्चित नहीं है कि यह घोषित नहीं है कि यह सुरक्षित है या नहीं।
उदाहरण:
private void saveJson(Object object, Type type, String directory, String fileName) {
File file = new File(getApplicationContext().getDir(directory, Context.MODE_PRIVATE),
fileName);
OutputStream outputStream = null;
Gson gson = new GsonBuilder().enableComplexMapKeySerialization().setPrettyPrinting()
.create();
try {
outputStream = new FileOutputStream(file);
BufferedWriter bufferedWriter;
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream,
StandardCharsets.UTF_8));
} else {
bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
}
gson.toJson(object, type, bufferedWriter);
bufferedWriter.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
if (DEBUG) Log.e(saveJson, "saveUserData, FileNotFoundException e: '" + e + "'");
} catch (IOException e) {
e.printStackTrace();
if (DEBUG) Log.e(saveJson, "saveUserData, IOException e: '" + e + "'");
} finally {
if (outputStream != null) {
try {
outputStream.flush();
outputStream.close();
} catch (IOException e) {
if (DEBUG) Log.e(saveJson, "saveUserData, finally, e: '" + e + "'");
}
}
}
}
private Object loadJson(Type type, String directory, String fileName) {
Object jsonData = null;
File file = new File(getApplicationContext().getDir(directory, Context.MODE_PRIVATE),
fileName);
InputStream inputStream = null;
Gson gson = new GsonBuilder().enableComplexMapKeySerialization().setPrettyPrinting()
.create();
try {
inputStream = new FileInputStream(file);
InputStreamReader streamReader;
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
streamReader = new InputStreamReader(inputStream,
StandardCharsets.UTF_8);
} else {
streamReader = new InputStreamReader(inputStream, "UTF-8");
}
jsonData = gson.fromJson(streamReader, type);
streamReader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
if (DEBUG) Log.e(TAG, "loadJson, FileNotFoundException e: '" + e + "'");
} catch (IOException e) {
e.printStackTrace();
if (DEBUG) Log.e(TAG, "loadJson, IOException e: '" + e + "'");
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
if (DEBUG) Log.e(TAG, "loadJson, finally, e: '" + e + "'");
}
}
}
return jsonData;
}
जहां उदाहरण के लिए प्रकार:
SqlSession session = MyBatisSqlSessionFactory.getSession();
List<User> users = session.selectList("dao.UserDao.findAll");
try {
JsonWriter writer = new JsonWriter(new FileWriter("C:\\file.json"));
writer.beginObject();
writer.name("data");
writer.beginArray();
for (User u : users) {
writer.beginObject();
writer.name("id").value(t.getId());
writer.name("name").value(t.getNom());
writer.endObject();
}
writer.endArray();
writer.endObject();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
हालांकि, यदि आपके उपयोगकर्ता वर्ग इस तरह दिखता में:
Type type = new TypeToken<Map<String, Object>>() { }.getType();
क्योंकि आप प्रत्येक लूप पुनरावृत्ति में एक ही फ़ाइल में लिख रहे हैं। आपको फ़ाइल में _list_ लिखना होगा, प्रत्येक तत्व नहीं। –
यदि मैं आपको समझता हूं, तो मैं लाइन "जेसनवाइटर लेखक = नया जेसनवाइटर (नया फ़ाइलवाइटर (" सी: \\ file.json ")) को स्थानांतरित करता हूं;" के लिए लाइन से पहले, लेकिन एक ही परिणाम –
तो आप समझ में नहीं आता है। आपको 'सूची' लिखनी होगी! जीसन इसे जेएसओएन को सिर्फ ठीक से क्रमबद्ध करेगा। –