android專案建立xml和儲存xml檔案
阿新 • • 發佈:2019-02-16
學安卓複習java基礎
因為專案需要刷新出昨天的文章,因此之前點選一份電子雜誌,建立一個新的xml檔案的方式就不對了,因為電子雜誌不同於新聞,不會時時更新,因此一條更新一次,所以我需要每天下載一份它的RSS 源的xml檔案到專案裡(曾經居然想下載到手機的sd卡里),檔案命名格式以時間加上雜誌名,那麼我每天需要建立這些xml,在專案下建立檔案可以在files和cache中建立,我選擇在files下建立。File file1 = null,file2=null,file3=null,file4=null; Date date2 = new Date(); SimpleDateFormat format2 = new SimpleDateFormat("yyyyMMdd"); //獲取專案檔案files的目錄 File tempFile = this.getFilesDir(); String yygypathstr = tempFile.toString(); //檔案命名格式為以時間(年月日)+資源名 file1 = new File(yygypathstr, (format2.format(date2)+"VICE中國"+ ".xml")); file2 = new File(yygypathstr, (format2.format(date2)+"設計癖"+ ".xml")); file3 = new File(yygypathstr, (format2.format(date2)+"知乎"+ ".xml")); file4 = new File(yygypathstr, (format2.format(date2)+"豆瓣一刻"+ ".xml")); //如果檔案不存在,才建立 if (!file1.exists() && !file2.exists() && !file3.exists() && !file4.exists()) { try { file1.createNewFile(); file2.createNewFile(); file3.createNewFile(); file4.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
這個放在第一個activity中進行判斷。建立好了之後,需要往這裡面些資料,如果檔案不為空且可以和RSS源連線上,就寫入資料,我們需要往當天的那份雜誌不為空的xml檔案寫入資料,用到迴圈判斷。
如果不為空就不存入資料Date date = new Date(); SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); String paperTitleName=format.format(date)+title+ ".xml"; File file=null; File fileXml=new File(xmlPath.toString()); File[] tempList = fileXml.listFiles(); //點選那一份雜誌,找到這份雜誌的當天xml賦給file for (int i = 0; i < tempList.length; i++) { if (paperTitleName.equals(tempList[i].getName())) { file=tempList[i]; } }
存入資料之後,開始解析xml檔案讀取資料,方法和我之前寫的如何讀取xml的方法一樣。明天我將完成如何向下滑動,刷新出昨天的文章。HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(RSS_URL); try { HttpResponse response = client.execute(get); if (response.getStatusLine().getStatusCode() == 200 && file.length()==0) { InputStream inputStream = response.getEntity().getContent(); FileOutputStream fos = new FileOutputStream(file); int byteread = 0; byte[] buffer = new byte[1024]; while ((byteread = inputStream.read(buffer)) != -1) { fos.write(buffer, 0, byteread); } fos.flush(); fos.close(); inputStream.close(); } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }