所以我在正确创建Json文件时遇到了麻烦。 是)我有的: 1. Gson libs 2.试着在Json中写一个像这样的新用户:
public static void writeUserBD(String name, String surname, int age) {
//writing in a Json format
JSONObject writeOne = new JSONObject();
JSONArray arr = new JSONArray();
for(int i = 0; i< arr.size() ; i++)
{
writeOne.put("name", name);
writeOne.put("surname", surname);
writeOne.put("age", new Integer(age));
arr.add(writeOne);
writeOne = new JSONObject();
}
//creating dir&file and writing in it
try {
File dir = new File("Test");
dir.mkdir();
File f = new File("Test/TestUser.json");
if (!dir.exists()) {
dir.mkdirs();
} else if (!f.exists()) {
f.createNewFile();
}
//here comes writing encoding problem ! ! !
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f.getAbsoluteFile(), true), Charset.forName("UTF-8")));
try {
bw.write(arr + " " + "\n");
} finally {
bw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
但如果我重新加载我的应用程序并尝试编写一个新应用程序,它将编写一个新的JSONObject,我的输出如下:
[{}]
[{}]
在这种情况下,我无法解析我的json文件(用于创建简单的登录)我得到的错误如"unexcpected token [[]"
正如我所理解的那样,这是因为文件中有超过1个jsonobject。
所以我的问题是:如何以正确的格式在json文件中编写新用户数据(即使重新加载应用),我可以使用/例如[{},{},{}]
答案 0 :(得分:1)
尝试
new FileOutputStream(f.getAbsoluteFile(), false)
true参数追加到当前文件,false应该创建一个新参数
答案 1 :(得分:0)
您的代码输出应该是一个空数组,因为您从不向数组添加元素。 您创建一个新数组并迭代它。但是一个新的数组没有元素,因此里面的代码也没有 循环永远不会被执行。除此之外,您只想添加一个新用户 ,因此您不需要循环。
您应首先阅读该文件,然后将新用户添加到该文件并将其写回。我为你创建了一个简单的例子。 我之前没有使用过GSON,所以我确信有更好的方法可以做到这一点,但它确实有效。 我使用了try-with-resource功能和Java 7的新IO API,并且没有进一步处理异常。所以如果你想处理异常 在方法内部相应地更改代码。我没有创建文件结构,所以你也应该自己创建。
public static void writeUserBD(final String name, final String surname, final int age) throws IOException {
final Path jsonFile = Paths.get("Test/TestUser.json");
final JsonArray users = new JsonArray();
// Read all existing users
if (Files.isRegularFile(jsonFile)) {
try (final JsonReader r = new JsonReader(Files.newBufferedReader(jsonFile))) {
r.beginArray();
while (r.hasNext()) {
final JsonObject user = new JsonObject();
r.beginObject();
r.nextName();
user.addProperty("name", r.nextString());
r.nextName();
user.addProperty("surname", r.nextString());
r.nextName();
user.addProperty("age", r.nextInt());
r.endObject();
users.add(user);
}
r.endArray();
}
}
// Create the new user
final JsonObject user = new JsonObject();
user.addProperty("name", name);
user.addProperty("surname", surname);
user.addProperty("age", age);
users.add(user);
// Write all users
try (final BufferedWriter w =
Files.newBufferedWriter(jsonFile, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) {
w.write(users.toString());
}
}