iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 17
0
Mobile Development

Andriod Studio 菜鳥的學習分享系列 第 17

[Android Studio菜鳥的學習分享]檔案選擇器應用(上)-匯入CSV檔案

CSV全名是Comma Separated Value
它是一種用逗號作為分隔的檔案類型,
常用於資料庫資料的匯入與匯出,
非常簡單、方便的讓程式讀取,
且因為簡潔,
所以不需要多龐大的系統便能開啟CSV檔進行檔案編輯。

匯入與匯出將分隔成兩天分享!
今天要先分享如何配合使用前幾天的檔案選擇器,
[Android Studio菜鳥的學習分享]使用他人製作元件模板
將CSV檔的資料匯入進APP內使用。


目標:

1. 按下 匯入檔案:

匯入CSV檔的資料至 csvArrayList

2. ArrayList - csvArrayList

案匯入的變數。


結果預覽:

1. 匯入檔案-testCsv.csv

https://ithelp.ithome.com.tw/upload/images/20200917/20129524CVy19DpKBz.jpg

2. ArrayList - csvDataList (陣列內容)

csvDataList.get(0);
csvDataList.get(1);
csvDataList.get(2);
csvDataList.get(3);
csvDataList.get(4);
csvDataList.get(5);

csvDataList.get(0) -> 1
csvDataList.get(1) -> apple
csvDataList.get(2) -> 2
csvDataList.get(3) -> banana
csvDataList.get(4) -> 3
csvDataList.get(5) -> cherry


activity_main.xml

https://ithelp.ithome.com.tw/upload/images/20200917/20129524mAZQtwu2mu.jpg


ReadCSVThread.java

讀取CSV檔的方法撰寫在這邊,
方便使用和讓MainActivity乾淨一點。
https://ithelp.ithome.com.tw/upload/images/20200917/20129524ZMJ1t8Gc8T.jpg

Step01-繼承Thread:

public class ReadCSVThread extends Thread{

}

Step02-新增變數:

  1. fileName:
    放置獲得的檔案位置
  2. csvArrayList:
    放置讀取到的資料
String fileName;
ArrayList<String> csvArrayList = new ArrayList<String>();

Step03-新增全域方法:

將取得的檔案位置放入變數fileName

public ReadCSVThread(String fileName){
    this.fileName = fileName;
}

Step04-新增執行方法:

@Override
   public void run(){
       super.run();

   }

Step05-將原始位置字串轉File:

File csvFile = new File(fileName);

Step06-保險起見加一道try...catch:

try{

}
catch (Exception error){
    error.printStackTrace();
}

Step07-使用內建閱讀器BufferedReader:

BufferedReader reader = new BufferedReader(new FileReader(csvFile));

Step08-新增變數:

1 .csvString:
放置目前閱讀器讀取資料
2.arrayFinish:
放置使用split分割完的資料

String csvString;
String[] arrayFinish;

Step09-檢查閱讀器目前行是否有資料:

while ((csvString = reader.readLine()) != null){
  
}

Step10-split方法分割資料:

arrayFinish = csvString.split(",");

Step11-將資料放入ArrayList-csvArrayList:

for(String arrayFinishData:arrayFinish){
    csvArrayList.add(arrayFinishData);
}

Step12-關閉閱讀器

reader.close();

MainActivity.java

https://ithelp.ithome.com.tw/upload/images/20200917/20129524SbNSnOiTFM.jpg

https://ithelp.ithome.com.tw/upload/images/20200917/201295249s64V5DhV6.jpg

(1)製作方法openCsv

Step01-創建方法openCsv:

fileName方便放入CSV檔案位置

private void openCsv(String fileName){

}

Step02-檢查是否有選擇匯入檔案:

if(fileName != ""){

}
else {
    textOutput.setText("請選擇匯入檔案!!");
}

Step03-呼叫剛剛創建的方法ReadCSVThread:

private ReadCSVThread readCSVThread;

Step04-新建變數csvDataList(重點):

private ArrayList<String> csvDataList = new ArrayList<String>();

Step05-執行ReadCSVThread內的方法(1):

將檔案位置給予方法

readCSVThread = new ReadCSVThread(fileName);

Step06-執行ReadCSVThread內的方法(2):

開始讀檔

readCSVThread.run();

Step07-清空csvDataList:

csvDataList.clear();

Step08-將ReadCSVThread內獲得的資料放入清空csvDataList:

csvDataList.addAll(readCSVThread.csvArrayList);

Step09-輸出字串匯入成功:

textOutput.setText("請選擇匯入檔案!!");

(2)按鈕監聽器內容

以下介紹請看
[Android Studio菜鳥的學習分享]使用他人製作元件模板

textOutput = (TextView) findViewById(R.id.textOutput);
btnFileInput = (Button) findViewById(R.id.btnFileInput);
btnFileOutput = (Button) findViewById(R.id.btnFileOutput);
btnFileInput.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if(permissionGranted()) {
            SingleFilePickerDialog singleFilePickerDialog = new SingleFilePickerDialog(MainActivity.this,
                    () -> textOutput.setText("Canceled!!"),
                    files -> openCsv(files[0].getPath()));
            singleFilePickerDialog.show();
        }
        else{
            requestPermission();
        }
    }
});

(3)檢查權限方法 & 權限詢問給予視窗

以下介紹請看
[Android Studio菜鳥的學習分享]使用他人製作元件模板

 private boolean permissionGranted(){
     return ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
             && ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
 }
 private void requestPermission(){
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
 }

上一篇
[Android Studio菜鳥的學習分享]使用他人製作元件模板
下一篇
[Android Studio菜鳥的學習分享]檔案選擇器應用(下)-匯出CSV檔案
系列文
Andriod Studio 菜鳥的學習分享30

尚未有邦友留言

立即登入留言