●補充說明和程式說明
(一) 檔案的讀取使用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的資料內容
(四)如果資料存放在物件中(如自己做了一個類別存放資料),這種讀取方式後面會講
●程式參考(GitHub):使用BufferedWriter和BufferedReader做檔案(File)的讀取與寫入
文章標籤
全站熱搜
留言列表