1. 程式人生 > >Android 寫檔案 複寫和追加 兩種方式

Android 寫檔案 複寫和追加 兩種方式

    /
     * 此方法為android程式寫入sd檔案檔案,用到了android-annotation的支援庫@
     *
     * @param buffer   寫入檔案的內容
     * @param folder   儲存檔案的資料夾名稱,如log;可為null,預設儲存在sd卡根目錄
     * @param fileName 檔名稱,預設app_log.txt
     * @param append   是否追加寫入,true為追加寫入,false為重寫檔案
     * @param autoLine 針對追加模式,true為增加時換行,false為增加時不換行
     */
    public synchronized static void writeFileToSDCard(@NonNull final byte[] buffer, @Nullable final String folder,
                                                      @Nullable final String fileName, final boolean append, final boolean autoLine) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                boolean sdCardExist = Environment.getExternalStorageState().equals(
                        android.os.Environment.MEDIA_MOUNTED);
                String folderPath = "";
                if (sdCardExist) {
                    //TextUtils為android自帶的幫助類
                    if (TextUtils.isEmpty(folder)) {
                        //如果folder為空,則直接儲存在sd卡的根目錄
                        folderPath = Environment.getExternalStorageDirectory()
                                + File.separator;
                    } else {
                        folderPath = Environment.getExternalStorageDirectory()
                                + File.separator + folder + File.separator;
                    }
                } else {
                    return;
                }

                File fileDir = new File(folderPath);
                if (!fileDir.exists()) {
                    if (!fileDir.mkdirs()) {
                        return;
                    }
                }
                File file;
                //判斷檔名是否為空
                if (TextUtils.isEmpty(fileName)) {
                    file = new File(folderPath + "app_log.txt");
                } else {
                    file = new File(folderPath + fileName);
                }
                RandomAccessFile raf = null;
                FileOutputStream out = null;
                try {
                    if (append) {
                        //如果為追加則在原來的基礎上繼續寫檔案
                        raf = new RandomAccessFile(file, "rw");
                        raf.seek(file.length());
                        raf.write(buffer);
                        if (autoLine) {
                            raf.write("\n".getBytes());
                        }
                    } else {
                        //重寫檔案,覆蓋掉原來的資料
                        out = new FileOutputStream(file);
                        out.write(buffer);
                        out.flush();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        if (raf != null) {
                            raf.close();
                        }
                        if (out != null) {
                            out.close();
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }

相關推薦

Android 檔案 複寫追加 方式

/ * 此方法為android程式寫入sd檔案檔案,用到了android-annotation的支援庫@ * * @param buffer 寫入檔案的內容 * @param folder 儲存檔案的資料夾名稱,如log

Android以JSONOjectGSON方式解析json

length pre ray oid 字符 CA clas img name json文件如下: 將獲取到的json數據轉化為String形式 OkHttpClient client = new OkHttpClient(); R

關於NPOI匯出excel檔案(xlsxlsx格式)提示格式不符的問題

這兩天在做匯出excel檔案的時候遇到這個問題 本來我匯出的格式是xlsx格式的,但是下載得到的檔案格式變成了xls, 一開始以為是返回的contenttype設定錯了   return File(ms, "application/vnd.ms-excel", "新車型匯入模板檔案.xls

spring之AOP操作(基於aspectJ實現)--配置檔案註解方式實現

AOP概念   1 aop:面向切面(方面)程式設計,擴充套件功能不修改原始碼實現     2  AOP採取橫向抽取機制,取代了傳統縱向繼承體系重複性程式碼     3 aop底層使用動態代理實現     (1)第一種情況,有介面情況,使用動態代理建立介面實現類代理物

Java常用面試題16 用IONIO方式實現檔案拷貝

問:用IO和NIO兩種方式實現檔案拷貝 答: import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;

Android 跑馬燈效果實現的方式,解決viewpager的衝突問題

第一篇部落格寫一點簡單的東西,多麼的簡單,就是一個跑馬燈,簡單的要死。所以話不多,寫起來。首先我們來講一個段子先緩和一下氣氛。大學的時候,隔壁宿舍老喜歡蹭我的wifi,煩死了,然後我把wifi名改成了:206有個帥哥是誰。密碼是我的名字,媽的看誰還蹭,結果。除了

Android如何區分debugrelease狀態

Android開發中識別debug還是release狀態還是很有用的,比方說列印日誌,有些日誌開發的時候需要,可是線上正式包不需要,這個時候如果知道了debug狀態就可以很方便的隱藏非必要日誌而又不影響開發,還有很多其他的作用。 一般,大家會用BuildConfig.DEB

Java檔案上傳的方式(uploadifySpring預設方式

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ include file="../jsp/include/taglibs.jsp"%> <!DOCTY

android 隱藏默認標題欄方式

feature set body eat androi get featrue blog title 在setconnetView()之前加入 requestWindowFeature(Window.FEATURE_NO_TITLE);//第一種 getWindow().s

JDBC中Oracle的SIDServiceName方式的連接字符串格式

bottom none color bubuko div nbsp rac 字符串 padding SID格式: jdbc:oracle:thin:@<host>:<port>:<SID> 如: jdbc:oracle:thin:@19

9.10 路由控制之反向解析--【別名】htmlviews方式實現

com 反向 技術分享 http mage login gin bsp 分享圖片 1. 在html裏反向解析 給路徑起別名,修改路徑時,不用每個地方都修改。 {% url ‘Log‘ %} : 就會去找別名為Log的URL,找到 "login/"後把"logi

julia開發環境安裝——VS code擴充套件JuliaPro方式

VS code擴充套件方式 首先,下載安裝julia1.0.0:我的上一篇文章 完成後,配置系統環境變數: 控制面板\所有控制面板項\系統–>高階系統設定 高階欄下點選系統變數~ 如圖: 在path下新增你的julia/bin路徑如(圖):G:\Julia-1.0.0

Android】adb connect 手機的方式

adb支援兩種連線Android系統的方式,USB方式及網路方式。一般android手機及android平板預設會設定為USB方式(直接插資料線的方式)。   下邊介紹兩種方式的切換方式。   1. 背景知識: android系統底層執行著一個服務(adbd),也就是在手機系統內

Map集合的遍歷方式以及TreeMap集合儲存自定義物件實現比較的ComparableComparator方式

Map集合的特點 1、Map集合中儲存的都是鍵值對,鍵和值是一一對應的 2、一個對映不能包含重複的值 3、每個鍵最多隻能對映到一個值上   Map介面和Collection介面的不同 Map是雙列集合的根介面,Collection是單列集合的根介面 1、Map是雙列的(是雙列集合的根介

Redis詳解 - SpringBoot整合Redis,RedisTemplate註解方式的使用

本文主要講 Redis 的使用,如何與 SpringBoot 專案整合,如何使用註解方式和 RedisTemplate 方式實現快取。最後會給一個用 Redis 實現分散式鎖,用在秒殺系統中的案例。 更多 Redis 的實際運用場景請關注開源專案 coderiver 專案地址:github.com/cac

mysqldumpxtrabackup方式進行非空庫複製搭建

mysqldump和xtrabackup兩種方式進行非空庫複製搭建 1、mysqldump非空庫複製搭建 2、xtrabackup非空庫複製搭建 mysqldump和xtrabackup兩種方式進行非空庫複製搭建 1、mysqldu

POI操作Excel詳解,HSSFXSSF方式

HSSF方式: package com.tools.poi.lesson1; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; impor

玩轉SpringCloud 三.斷路器(Hystrix)RestTemplate+RibbonFeign方式

 此文章基於: 三.斷路器(Hystrix) 在微服務架構中,根據業務來拆分成一個個的服務,服務與服務之間可以相互呼叫(RPC),在Spring Cloud可以用來呼叫。為了保證其高可用,單個服務通常會叢集部署。由於網路原因或者自身的原因,服務並不能保證100%可用,如果單個服務出現問

第一個django專案-通過命令列pycharm方式

以本機環境為例,ip地址為172.20.16.148,windows平臺,虛擬環境路徑為d:\VirtualEnv,專案存放位置為d:\DjangoProject   命令列方式 1.進入虛擬環境建立專案django-admin startproject projectname 專案的存

VirtualBox 設定虛擬機器網路 以及內建的linux系統 網路靜態ip的配置 包含有線無線方式

我們討論一下如何在Linux中設定網路連線,配置網路連線最基本的涉及到IP地址、掩碼、閘道器和DNS設定,一般情況下系統設定好以上資訊後就可以接入網路了,這裡介紹了Linux在文字模式下通過修改配置檔案來配置基本網路連線,涉及到更多的網路配置方法請參閱相關的書籍,本文只供Linu