Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 编写器未使用Gson处理json文件,代码执行后json文件为空_Java_Json_Gson_Filewriter_Writer - Fatal编程技术网

Java 编写器未使用Gson处理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

我正在尝试将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;
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
版本(可能不会有什么影响),那么之后就不需要关闭()
。这对我很有用。谢谢