代碼中獲得系統(tǒng)分區(qū)

前言:在最近的工作中涉及到從u盤(pán)拷貝大量數(shù)據(jù)到車(chē)機(jī),偶爾有失效的情況,后面發(fā)現(xiàn)是sdcard存儲(chǔ)空間不足,因此想在代碼中展示出當(dāng)前系統(tǒng)分區(qū).查看系統(tǒng)分區(qū)在adb中為adb shell df

我們用如下方法可執(zhí)行任意的adb shell命令,在此僅用"df"舉例
  • 代碼如下
 private String[] doRuntimeCmmd(String command) {
        Log.d(TAG, "doRuntimeCmmd:" + command);
        Process process = null;
        BufferedReader mOutReader = null;
        BufferedReader mErrorReader = null;
       try {
            process = Runtime.getRuntime().exec(command);
            Log.d(TAG, "process exec: " + process);
            
            mOutReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            int mOutread;
       char[] outBuffer = new char[4096];
            StringBuffer output = new StringBuffer();
            while ((mOutread = mOutReader.read(outBuffer)) > 0) {
                output.append(outBuffer, 0, mOutread);
            }   
            mErrorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
            int mErrorread;
            char[] errorBuffer = new char[4096];
            StringBuffer error = new StringBuffer();
              while ((mErrorread = mErrorReader.read(errorBuffer)) > 0) {
                error.append(errorBuffer, 0, mErrorread);
            }
            
            process.waitFor();
          String[] mResult = { output.toString(), error.toString() };
            Log.d(TAG, command +" Result:" + mResult[0]);
            Log.d(TAG, command+ " Error:" + mResult[1]);
            return mResult;
              } catch (Exception e) {
            e.printStackTrace();
            String[] mResult = { "error", "error" };
            Log.d(TAG, command + "  Result = " + mResult[0] + "   Error = " + mResult[1]);
            return mResult;
     } finally {
            try {
                if (mOutReader != null) {
                    mOutReader.close();
                }
          if (mErrorReader != null) {
                    mErrorReader.close();
                }
            if (process != null) {
                    Log.d(TAG, "process destroy: " + process);
                    process.destroy();
                }
         } catch (IOException e) {
                e.printStackTrace();
            }
                }
    }

我們?cè)诖a中按如下使用

String[] runtimeCmmd = doRuntimeCmmd("df");
MySortViewOfCMD textView = new MySortViewOfCMD(getActivity());
textView.setCurrentString(runtimeCmmd[0]);

用此方法得到的文本結(jié)果,并不像adb命令行中格式化的,需要自定義控件

  • 自定義view實(shí)現(xiàn)排版僅供參考
    public class MySortViewOfCMD extends TextView {

    private String text;
    int lineCount = 0;
    private Paint paint = new Paint();
    private ArrayMap<Integer, String[]> charByMap;
    private int mWidth = 900;// px
    private int mHeight = 660;
    private Scroller mScroller;
    private int lastPointX;
    private int lastPointY;
    public MySortViewOfCMD(Context context) {
        super(context);
        initPaint(context);
    }
    public MySortViewOfCMD(Context context, AttributeSet attrs) {
        super(context, attrs);
        initPaint(context);
    }
    private void initPaint(Context context) {
        paint.setColor(context.getResources().getColor(R.color.white));
        paint.setTextSize(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
                18, context.getResources().getDisplayMetrics()));
        mScroller = new Scroller(context);
    }
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int width = measureDimension(mWidth, widthMeasureSpec);
        int height = measureDimension(mHeight, heightMeasureSpec);
        setMeasuredDimension(width, height);
    }
    private int measureDimension(int defaultSize, int measureSpec) {

        int result = defaultSize;
        int specMode = MeasureSpec.getMode(measureSpec);
        int specSize = MeasureSpec.getSize(measureSpec);
        if (specMode == MeasureSpec.EXACTLY) {
            result = specSize;
        } else if (specMode == MeasureSpec.AT_MOST) {
            result = Math.min(defaultSize, specSize);
        } else {
        result = defaultSize;
        }
        return result;
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        for (int i = 0; i < charByMap.size(); i++) {//繪制行
        String[] strings = charByMap.get(i);
            for (int j = 0; j < strings.length; j++) {//繪制列
                if (j == 1) {//針對(duì)第二列做特殊處理,防止與第一列重影
                    canvas.drawText(strings[j], j * (mWidth / 3) + 60,
                            i * 30 + 25, paint);
                continue;
                }
                canvas.drawText(strings[j], j * (mWidth / 3), i * 30 + 25,
                        paint);
            }
        }
        }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:

            lastPointX = (int) event.getX();
            lastPointY = (int) event.getY();
            return true;
    case MotionEvent.ACTION_MOVE:
            
            int mXMove = (int) event.getX();
             int scrolledX = (int) (lastPointX - mXMove);
     if(getScrollX() + scrolledX < 0){//左邊界
                 scrollTo(0, 0);
                 return true;
             }
        if (getScrollX() + getWidth() + scrolledX < (mWidth / 3) * 5)//小于右邊界
                mScroller.startScroll(getScrollX(), 0,
                        lastPointX - (int) event.getX(), 0, 200);
            invalidate();

            break;
    case MotionEvent.ACTION_UP:

            break;
        }
        return true;
    }
    /**
     * 平滑滾動(dòng)        
     */
    @Override
    public void computeScroll() {
        if (mScroller.computeScrollOffset()) {
            scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
            invalidate();
        }
    }
        public void setCurrentString(String text) {
        this.text = text;
        charByMap = saveCharByMap(text);
        invalidate();
    }
    /**
     * 根據(jù)傳進(jìn)來(lái)的string保存每一行的字符
     * 
     * @param string
     *            -顯示的字符串 eg: file size use \n filedddd size use \n
     */
     private ArrayMap<Integer, String[]> saveCharByMap(String string) {
        String[] lineString = string.split("\n");
        ArrayMap<Integer, String[]> charMap = new ArrayMap<Integer, String[]>();
        lineCount = lineString.length;
    for (int i = 0; i < lineCount; i++) {
            String[] charItem = lineString[i].split("\\s+");// 按空格切出字符

            charMap.put(i, charItem);
        }
            return charMap;
    }

}

感謝android,感謝開(kāi)源

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末史煎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子劲室,更是在濱河造成了極大的恐慌结窘,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喉磁,死亡現(xiàn)場(chǎng)離奇詭異官脓,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)孕暇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)赤兴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人桶良,你說(shuō)我怎么就攤上這事∏” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵承二,是天一觀(guān)的道長(zhǎng)纲爸。 經(jīng)常有香客問(wèn)我,道長(zhǎng)读虏,這世上最難降的妖魔是什么袁滥? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮题翻,結(jié)果婚禮上腰鬼,老公的妹妹穿的比我還像新娘塑荒。我一直安慰自己,他們只是感情好彼硫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布凌箕。 她就那樣靜靜地躺著,像睡著了一般牵舱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上礁凡,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天慧妄,我揣著相機(jī)與錄音,去河邊找鬼腰涧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛疗锐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播滑臊,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼箍铲,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了关划?” 一聲冷哼從身側(cè)響起翘瓮,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎资盅,沒(méi)想到半個(gè)月后踊赠,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體每庆,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年伦籍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凤价。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拔创。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖慢逾,靈堂內(nèi)的尸體忽然破棺而出灭红,到底是詐尸還是另有隱情侣滩,我是刑警寧澤变擒,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站策添,受9級(jí)特大地震影響毫缆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜苦丁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望产上。 院中可真熱鬧蛾狗,春花似錦、人聲如沸淘太。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至松嘶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間翠订,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工官撼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留似谁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓秃诵,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親菠净。 傳聞我的和親對(duì)象是個(gè)殘疾皇子彪杉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,166評(píng)論 25 707
  • 那年在讶,我十七歲煞抬。在這個(gè)青澀和稚嫩兼具的年齡构哺,我離開(kāi)家,到不遠(yuǎn)的一座小城上師范曙强。 那天,離家時(shí)溪食,父親背著沉重的行李,...
    燈火闌珊12閱讀 1,251評(píng)論 0 0
  • 下午讀到何兆武老先生的《上學(xué)記》错沃,里面有句話(huà)說(shuō)的很妙: 一個(gè)人的精神生活,不僅僅是邏輯的枢析、理智的,不僅僅是科學(xué)的司浪,...
    自由和安閱讀 319評(píng)論 3 0
  • 文題 最終夏等不到冬 小段子在這個(gè)英雄泛濫的年代把沼,有一種英雄最為真實(shí),他們便是銀幕上的超級(jí)間諜饮睬、超級(jí)特工們。他們有...
    個(gè)人日常腦洞堆積地閱讀 414評(píng)論 0 0