●補充說明和程式說明

(一) 檔案的讀取使用FileReader比較不好用,因為讀出來會是字元陣列,一般會使用BufferedReader和BufferedWriter=>可以直接處理字串

(二)BufferedReader和BufferedWriter
public void write(View view) {
    String path = getFilesDir().getAbsolutePath();
    File fname = new File(path + File.separator "test.txt");
    try {
        FileWriter fw = new FileWriter(fname);
        BufferedWriter bw = new BufferedWriter(fw);
        bw.write("Hello World");
        bw.newLine();
        bw.write("This is android");
        bw.close();
        fw.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
**說明:
1.BufferedWriter要透過FileWriter來建立,所以要先建立FileWriter物件
2..newLine()是換行
3.關閉兩個檔案
 
 
public void read(View view) {
String path = getFilesDir().getAbsolutePath();
String fname=path + File.separator + "test1.txt";
try {
FileReader fr = new FileReader(fname);
BufferedReader br = new BufferedReader(fr);
String str;
while ((str=br.readLine()) != null)
{
Log.d("FNAME", "Read:" + str);
}
br.close();
fr.close();
 
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
**說明:
1.BufferedReader要透過FileReader來建立,所以要先建立FileReader物件
2..readLine()只讀取一行,把讀出來的內容存入字串str,如果讀不出來會是null,因為資料不是只有一行,而且有空行,所以可以用while來判斷,只要讀到的不是null就把資料寫入log中,就可以抓取所有資料
3.最後要記得關閉兩個檔案
 
(三)擺放資料的方法,要如何把整數陣列寫入資料並讀取
1.寫入
public void write2(View view) {
int[] data = {4,1,7,3,4,8,2,1};
StringBuilder sb = new StringBuilder();
for (int i : data)
{
sb.append(i + ",");
}
String path = getFilesDir().getAbsolutePath();
File fname = new File(path + File.separator + "test2.txt");
try {
FileWriter fw = new FileWriter(fname);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(sb.toString());
bw.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
 
 
}
**說明:
1.要利用StringBuilder,所以先建立StringBuilder物件
2.透過foreach迴圈,把i+","放入StringBuilder,此時sb已經成為整數+,的組合了
3.寫入時再把sb用toString();轉成字串寫入即可
 
2.讀取
public void read2(View view) {
    String path = getFilesDir().getAbsolutePath();
    File fname = new File(path + File.separator "test2.txt");
    ArrayList<Integer> mylist = new ArrayList();
    try {
        FileReader fr = new FileReader(fname);
        BufferedReader br = new BufferedReader(fr);
        String str;
        str = br.readLine();
        String strdata[] = str.split(",");
        for (String s : strdata)
        {
            if (s.length() > 0)
            {
                mylist.add(Integer.valueOf(s));
            }
        }
        br.close();
        fr.close();
 
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    for (int i : mylist)
    {
        Log.d("FNAME""data:" + i);
    }
}
**說明:
1.讀取時只要讀一次,要先建立一個arraylist來放資料陣列
2.把讀取進來的資料存入str中,因為前面寫入時每筆資料後面都有逗號,再用split()方法以逗號分割每筆資料放入陣列中
=>public String[] split(String regex)
=>Splits this string around matches of the given regular expression
=>Returns:the array of strings computed by splitting this string around matches of the given regular expression
3.因為最後一個逗號後面沒有資料,所以如果用,做區隔,最後會多一個空白,所以當跑foreach迴圈時,要判斷s.length>0
=>字串的長度=>public int length():Returns the length of this string. The length is equal to the number of Unicode code units in the string.
4.用foreach迴圈把每一個值轉成整數放入arraylist中
5.valueOf:Integer valueOf (String s)=>Returns an Integer object holding the value of the specified String.
=>把字串轉成Integer物件 
6.再用foreach迴圈配合log,看每一筆arraylist的資料內容
 
(四)如果資料存放在物件中(如自己做了一個類別存放資料),這種讀取方式後面會講
 
 
arrow
arrow

    muchone 發表在 痞客邦 留言(0) 人氣()