Java 编写器未使用Gson处理json文件,代码执行后json文件为空
我正在尝试将json数据写入json文件 代码执行后不会抛出错误,但.json文件为空 请找到下面的代码和帮助Java 编写器未使用Gson处理json文件,代码执行后json文件为空,java,json,gson,filewriter,writer,Java,Json,Gson,Filewriter,Writer,我正在尝试将json数据写入json文件 代码执行后不会抛出错误,但.json文件为空 请找到下面的代码和帮助 import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.util.ArrayList; import java.util.List; import com.google.gson.Gson; impor
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
public class Test {
public static void main(String[] args) throws JSONException {
try {
List<String> foo = new ArrayList<String>();
foo.add("1");
foo.add("2");
foo.add("3");
System.out.println("values :: "+foo);
Writer writer = new FileWriter("operatorList.json");
Gson gson = new GsonBuilder().create();
gson.toJson(foo, writer);
}
catch(Exception e) {
e.printStackTrace();
}
}
}
导入java.io.BufferedWriter;
导入java.io.FileWriter;
导入java.io.IOException;
导入java.io.Writer;
导入java.util.ArrayList;
导入java.util.List;
导入com.google.gson.gson;
导入com.google.gson.GsonBuilder;
导入com.google.gson.JsonObject;
公开课考试{
公共静态void main(字符串[]args)抛出JSONException{
试一试{
List foo=new ArrayList();
foo.添加(“1”);
foo.添加(“2”);
foo.添加(“3”);
System.out.println(“值::”+foo);
Writer-Writer=newfilewriter(“operatorList.json”);
Gson Gson=new GsonBuilder().create();
toJson(foo,作家);
}
捕获(例外e){
e、 printStackTrace();
}
}
}
我以前的回答对你没有帮助。试试这个。问题似乎在于序列化/反序列化列表。我希望它有帮助,你应该能够运行它
public class Main {
public static void main(String[] args) {
List<String> operators = new ArrayList<>();
operators.add("Bruce Lee");
operators.add("Jackie Chan");
operators.add("Chuck Norris");
Type listOfStringObjects = new TypeToken<List<String>>(){}.getType();
Gson gson = new GsonBuilder().create();
String json = gson.toJson(operators, listOfStringObjects);
try(FileWriter writer = new FileWriter("operatorList.json")) {
writer.append(json);
System.out.println("Successfully serialized operators!");
}catch (IOException ex) {
System.err.format("An IO Exception was occurred: %s%n", ex);
System.exit(-1);
}
// Deserializing
System.out.println("Deserializing operators from JSON (Reading back)...");
try(BufferedReader reader = new BufferedReader(new FileReader("operatorList.json"))) {
StringBuilder jsonData = new StringBuilder();
String line;
while((line = reader.readLine()) != null) {
jsonData.append(line);
}
List<String> operatorsRead = gson.fromJson(jsonData.toString(), listOfStringObjects);
for(String operator : operatorsRead) {
System.out.println("Operator: " + operator);
}
}catch (Exception ex) {
System.err.format("An IO Exception was occurred: %s%n", ex);
}
}
}
公共类主{
公共静态void main(字符串[]args){
列表运算符=新的ArrayList();
添加(“李小龙”);
运营商。添加(“成龙”);
添加(“Chuck Norris”);
类型listOfStringObjects=newTypeToken(){}.getType();
Gson Gson=new GsonBuilder().create();
字符串json=gson.toJson(操作符、listOfStringObjects);
try(FileWriter=newfilewriter(“operatorList.json”)){
writer.append(json);
System.out.println(“成功序列化运算符!”);
}捕获(IOEX异常){
System.err.format(“发生IO异常:%s%n”,例如);
系统退出(-1);
}
//反序列化
System.out.println(“从JSON反序列化运算符(读回)…”;
try(BufferedReader=newbufferedreader(newfilereader(“operatorList.json”)){
StringBuilder jsonData=新的StringBuilder();
弦线;
而((line=reader.readLine())!=null){
jsonData.append(行);
}
List OperatorRead=gson.fromJson(jsonData.toString(),listOfStringObjects);
for(字符串运算符:运算符读取){
System.out.println(“运算符:+运算符”);
}
}捕获(例外情况除外){
System.err.format(“发生IO异常:%s%n”,例如);
}
}
}
您的方法是正确的,只需刷新()并关闭()编写器,如下所示:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
public class Test {
public static void main(String[] args) throws JSONException {
try{
List<String> foo = new ArrayList<String>();
foo.add("1");
foo.add("2");
foo.add("3");
System.out.println("values :: "+foo);
Writer writer = new FileWriter("operatorList.json");
Gson gson = new GsonBuilder().create();
gson.toJson(foo, writer);
writer.flush(); //flush data to file <---
writer.close(); //close write <---
}catch(Exception e){
e.printStackTrace();
}
}
导入java.io.BufferedWriter;
导入java.io.FileWriter;
导入java.io.IOException;
导入java.io.Writer;
导入java.util.ArrayList;
导入java.util.List;
导入com.google.gson.gson;
导入com.google.gson.GsonBuilder;
导入com.google.gson.JsonObject;
公开课考试{
公共静态void main(字符串[]args)抛出JSONException{
试一试{
List foo=new ArrayList();
foo.添加(“1”);
foo.添加(“2”);
foo.添加(“3”);
System.out.println(“值::”+foo);
Writer-Writer=newfilewriter(“operatorList.json”);
Gson Gson=new GsonBuilder().create();
toJson(foo,作家);
writer.flush();//将数据刷新到文件中是否确实查看了正确的文件?gson.toJson(foo,writer);
存在问题。toJson
返回一个字符串,这是您要写入文件的字符串。@CholNhial No:void toJson(对象src,可追加的writer)
这是一个空白。请参阅@CholNhial,您能为我推荐一种更好的方法将json数据写入json吗file@Jens,是文件是正确的,或者使用java7语法:try(Writer Writer=new FileWriter(“operatorList.json”){Gson Gson=new GsonBuilder().create();Gson.toJson(foo,Writer);}我试图关闭Writer,Writer.close()但问题依然存在samw@CholNhial,请找到我上面的评论,在给出文件位置时出现了一些问题,我的代码运行正常谢谢!这真的很有帮助。我是Java新手,到目前为止看到的所有示例都没有提到刷新。事实上,刷新和关闭编写器解决了我的问题!谢谢你+1。谢谢你太多了!我正在使用Java 8版本(try(FileWriter fw=newfilewriter(myFile)){}
),我也遇到了同样的问题:我的Android应用程序从文件中读取json文本,然后有时会更改一些内容/将其保存回文件,然后再次读取(除其他外)。我后来检查了文件,文件中写入了文本,但我的应用程序始终抱怨它没有写入(第二次读取)。刷新编写器修复了此问题。:)好的,如果使用Java 8的try
版本(可能不会有什么影响),那么之后就不需要关闭()
。这对我很有用。谢谢