提问人:ERFAKLK 提问时间:12/9/2022 更新时间:12/9/2022 访问量:299
我怎么能从一个空的json文件中读取,在程序开始时它是空的,但后来可以写出来
How could I read from an empty json File,at the start of the program is it empty but later can be written
问:
读取文件是:
public ArrayList<Aventura> readFile(){
ArrayList<Aventura> aventures = new ArrayList<>();
try{
AventuraDAO aventuraDAO=new AventuraDAO();
AventuraManage aventuraManage=new AventuraManage(aventuraDAO);
Gson g=new Gson();
JsonReader reader=new JsonReader(new FileReader("Files/adventures.json"));
Aventura[] ave=g.fromJson(reader, Aventura[].class );
if (ave.length==0){
System.out.println("The file should be empty");
ArrayList<Aventura> aventures2 =null;
return aventures2;
}
for (int i = 0; i < ave.length; i++) {
aventures.add(ave[i]);
}
}
catch(FileNotFoundException e){
System.out.println("The file does not exists");
}
catch (IOException e){
ArrayList<Aventura> aventures2 =null;
System.out.println(e.getMessage());
e.printStackTrace();
}
return aventures;
我想知道要读取的对象是否具有 length==0,但这不是我想的方式。然后我会返回一个空数组列表,以便将来进行一些验证。
我有:
Exception in thread "main" java.lang.NullPointerException: Cannot read the array length because "ave" is null
at Persistence.AventuraDAO.readFile(AventuraDAO.java:25)
at Business.AventuraManage.lookMonstersCombatActual(AventuraManage.java:48)
at Presentation.Controller.createAdvenutre(Controller.java:198)
at Presentation.Controller.executeOption(Controller.java:47)
at Presentation.Controller.run(Controller.java:30)
at Main.main(Main.java:21)
答:
1赞
Max Alexander Hanna
12/9/2022
#1
尝试分隔成不同的值,例如
fileR = new FileReader("Files/adventures.json")
if fileR.length = 0 {return}
else
jsonR = new JsonReader(fileR)
1赞
computercarguy
12/9/2022
#2
您的异常指向变量“ave”是 ,因此请对其进行 null 检查以处理它。null
null
这可以像以下几点一样简单:
if (ave == null || ave.length==0){
由于循环假定 “ave” 变量中有值,因此应将其置于条件中。这样一来,上面的语句就是处理“ave”存在的唯一需要做的。for
else
if
null
如果你真的想从这个方法返回一个,那么在你的当前语句之前,将它自己的空检查分开,并在其中返回一个值,因为你的默认返回值是一个空数组。但是,这也意味着您必须确保返回数据类型可为 null,并在使用返回值的代码中处理 null。这并不难,只是你必须牢记并记住要处理的事情。null
if
null
if (ave == null){
return null;
}
评论