如何向json文件中寫入數據

先要創建一個寫數據的類:其中Folk是個實體類

  1. class MyJsonWriter {    
  2.        ArrayList<Folk> folks;    
  3.        File saveFile;    
  4.         public MyJsonWriter(ArrayList<Folk> folks){    
  5.             this.folks=folks;    
  6.         }    
  7.             
  8.         public void setFilePath(String filepath){    
  9.             saveFile=new File(filepath);    
  10.            try {    
  11.                 saveFile.createNewFile();    
  12.           } catch (IOException e) {    
  13.              
  14.                 e.printStackTrace();    
  15.            }    
  16.         }    
  17.             
  18.        public String getJsonData(){    
  19.            String jsonData = null;    
  20.     //      String jsonData=new JSONStringer().object().key("village").value("abc").endObject().toString();    
  21.             try {    
  22.                 StringBuilder builder=new StringBuilder();    
  23.                 ArrayList<String> folksData=new ArrayList<String>();    
  24.                 JSONArray array=new JSONArray();    
  25.                for(int i=0;i<folks.size();i++){    
  26.                     Folk folk=folks.get(i);    
  27.                     JSONObject jsonObject=new JSONObject();    
  28.                     jsonObject.put("name", folk.getName());    
  29.                     jsonObject.put("sex", folk.isSex()?"male":"female");    
  30.                     jsonObject.put("age", folk.getAge());    
  31.                     jsonObject.put("career", folk.getCareer());    
  32.                     jsonObject.put("salary", folk.getSalary());    
  33.                     folksData.add(jsonObject.toString());    
  34.                     array.put(jsonObject);    
  35.                 }    
  36.     //          JSONArray jsonArray=new JSONArray(folksData);    
  37.                int len =   array.length();    
  38.                 jsonData=new JSONStringer().object().key("vallage").value(array).endObject().toString();    
  39.                 System.out.println(jsonData);    
  40.                 writeData(jsonData);    
  41.             } catch (JSONException e) {    
  42.                
  43.                 e.printStackTrace();    
  44.             }    
  45.             return jsonData;    
  46.         }    
  47.         
  48.         private void writeData(String jsonData) {    
  49.              
  50.             try {    
  51.                 BufferedReader reader=new BufferedReader(new StringReader(jsonData));    
  52.                 BufferedWriter writer=new BufferedWriter(new FileWriter(saveFile));    
  53.                 int len=0;    
  54.                 char[] buffer=new char[1024];     
  55.                 while((len=reader.read(buffer))!=-1){    
  56.                     writer.write(buffer, 0, len);    
  57.                 }    
  58.                writer.flush();    
  59.                 writer.close();    
  60.                reader.close();    
  61.             } catch (IOException e) {    
  62.                  
  63.                 e.printStackTrace();    
  64.             }    
  65.         }    
  66.     }    
然後就是真正的寫入工作了,需要起線程的哦···需要的時候調這個方法就可以了。實體類那些是假數據

  1. public void writeData(){  
  2.         ArrayList<Folk> floks=new ArrayList<Folk>();  
  3.         Folk flok1=new Folk();  
  4.         flok1.setAge("10");  
  5.         flok1.setCareer("1");  
  6.         flok1.setName("flok1");  
  7.         flok1.setSalary(1);  
  8.         flok1.setSex(true);  
  9.         floks.add(flok1);  
  10.         Folk flok2=new Folk();  
  11.         flok2.setAge("11");  
  12.         flok2.setCareer("2");  
  13.         flok2.setName("flok2");  
  14.         flok2.setSalary(2);  
  15.         flok2.setSex(true);  
  16.         floks.add(flok2);  
  17.         Folk flok3=new Folk();  
  18.         flok3.setAge("12");  
  19.         flok3.setCareer("3");  
  20.         flok3.setName("flok3");  
  21.         flok3.setSalary(3);  
  22.         flok3.setSex(true);  
  23.         floks.add(flok3);  
  24.         MyJsonWriter writer=new MyJsonWriter(floks);  
  25.         writer.setFilePath(PATH);  
  26.         writer.getJsonData();  
  27.     }  
接下來就是讀json文件中的數據啦:

  1. readbtn.setOnClickListener(new OnClickListener() {  
  2.               
  3.             @Override  
  4.             public void onClick(View v) {  
  5.                   
  6.                 new Thread() {  
  7.                     @Override  
  8.                     public void run() {  
  9.                           
  10.                         Message msg = handler.obtainMessage();  
  11.                         msg.obj = getFileFromSD(PATH);  
  12.                         msg.what = 1;  
  13.                         handler.sendMessage(msg);  
  14.                     }  
  15.                 }.start();  
  16.                   
  17.             }  
  18.         });  
  19.         }  
  20.     private Handler handler = new Handler() {  
  21.         @Override  
  22.         public void handleMessage(Message msg) {  
  23.             if (msg.what == 1) {  
  24.                 String result = (String) msg.obj;  
  25.                 try {  
  26.                     JSONObject jObj = new JSONObject(result);  
  27.                     tv.setText("people:"+jObj.getString("vallage"));  
  28.                 } catch (JSONException e) {  
  29.                     e.printStackTrace();  
  30.                 }  
  31.             }  
  32.    
  33.         }  
  34.     };  
  35.     private String getFileFromSD(String path) {  
  36.         String result = "";  
  37.    
  38.         try {  
  39.             FileInputStream f = new FileInputStream(path);  
  40.             BufferedReader bis = new BufferedReader(new InputStreamReader(f));  
  41.             String line = "";  
  42.             while ((line = bis.readLine()) != null) {  
  43.                 result += line;  
  44.             }  
  45.         } catch (Exception e) {  
  46.             e.printStackTrace();  
  47.         }  
  48.         return result;  
  49.    
  50.     }  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章