1. 文件的基本操作
File类的相关技巧和操作:文件的创建、重命名和删除,文件夹的创建和删除等操作。
1 package control;
2
3 import java.io.File;
4
5 public class FileUtil {
6 public static final String FILE_NAME = "myfile.txt";
7 public static final String FOlDER_NAME = "NewFolder"+File.separator+"AnotherNewFolder";
8
9 }
1 package control;
2
3 import java.io.File;
4 import java.io.IOException;
5
6 public class CreatFile {
7 public static void main(String[] args) {
8 File file = new File(FileUtil.FILE_NAME);
9 if (!file.exists()) {
10 try {
11 file.createNewFile();
12 System.out.println("文件已经创建了");
13 } catch (IOException e) {
14 e.printStackTrace();
15 }
16 } else {
17 System.out.println("文件已经存在!");
18 System.out.println("文件名为:" + file.getName());
19 System.out.println("文件的绝对路径为:" + file.getAbsolutePath());
20 System.out.println("文件的相对路径为:" + file.getPath());
21
22 System.out.println("文件大小为: " + file.length() + "字节");
23 System.out.println("文件是否可读:" + file.canRead());
24 System.out.println("文件是否可写:" + file.canWrite());
25 }
26 }
27
28 }
1 package control;
2
3 import java.io.File;
4
5 public class RenameFile {
6 public static void main(String[] args) {
7 File file = new File(FileUtil.FILE_NAME);
8 File newFile = new File("anotherFile.txt");
9 file.renameTo(newFile);
10 System.out.println(newFile);
11 System.out.println(file.getName());
12 }
13 }
1 package control;
2
3 import java.io.File;
4
5 public class DeleteFile {
6 public static void main(String[] args) {
7 File file = new File(FileUtil.FILE_NAME);
8 if (file.exists()) {
9 file.delete();
10 System.out.println("文件已经被删除了!");
11 }
12 }
13
14 }
1 package control;
2
3 import java.io.File;
4
5 public class CreatFolder {
6
7 public static void main(String[] args) {
8 File folder = new File(FileUtil.FOlDER_NAME);
9 if (folder.exists() != true) {
10 folder.mkdirs();
11 }
12 }
13 }
1 package control;
2
3 import java.io.File;
4
5 public class RemoveFolder {
6 public static void main(String[] args) {
7 File folder = new File(FileUtil.FOlDER_NAME);
8 if (folder.exists()) {
9 folder.delete();
10 }
11 }
12
13 }
2. 读取Assets中的文件数据
使用getResources().getAssets().open("filename")获取Assets文件夹中的文件数据流?。Assets文件夹在根目录下。注意使用UTF-8编码。
3. 读取raw目录中的文件数据
getResources().openRawResource(fileid)方法获取raw文件夹中文件的数据流?。
1 package com.example.readassets;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStream;
6 import java.io.InputStreamReader;
7 import java.io.UnsupportedEncodingException;
8
9 import android.app.Activity;
10 import android.content.res.Resources.NotFoundException;
11 import android.os.Bundle;
12 import android.util.Log;
13 import android.view.View;
14
15 public class MainActivity extends Activity {
16
17 private static final String TAG = "ReadAssets";
18 private static final String TAG_RAW = "RawData";
19
20 @Override
21 protected void onCreate(Bundle savedInstanceState) {
22 super.onCreate(savedInstanceState);
23 setContentView(R.layout.activity_main);
24
25 findViewById(R.id.btnReadTxt).setOnClickListener(
26 new View.OnClickListener() {
27
28 @Override
29 public void onClick(View v) {
30 try {
31 // InputStream返回的是字节流,因此读取文本文件时,要包装成字符流
32 InputStream is = getResources().getAssets().open(
33 "info.txt");
34 InputStreamReader isr = new InputStreamReader(is,
35 "UTF-8");
36 BufferedReader bfr = new BufferedReader(isr);
37 String in = "";
38 while ((in = bfr.readLine()) != null) {
39 Log.i(TAG, in);
40 }
41 } catch (IOException e) {
42 e.printStackTrace();
43 }
44 }
45 });
46
47 findViewById(R.id.btnReadRaw).setOnClickListener(
48 new View.OnClickListener() {
49
50 @Override
51 public void onClick(View v) {
52 try {
53 InputStream is = getResources().openRawResource(
54 R.raw.info);
55 InputStreamReader isr = new InputStreamReader(is,
56 "UTF-8");
57 BufferedReader bfr = new BufferedReader(isr);
58 String inString = "";
59 while ((inString = bfr.readLine()) != null) {
60 Log.i(TAG_RAW, inString);
61 }
62 } catch (NotFoundException e) {
63 // TODO Auto-generated catch block
64 e.printStackTrace();
65 } catch (UnsupportedEncodingException e) {
66 // TODO Auto-generated catch block
67 e.printStackTrace();
68 } catch (IOException e) {
69 // TODO Auto-generated catch block
70 e.printStackTrace();
71 }
72
73 }
74 });
75 }
76
77 }
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:tools="http://schemas.android.com/tools"
3 android:id="@+id/container"
4 android:layout_width="match_parent"
5 android:layout_height="match_parent"
6 tools:context="com.example.readassets.MainActivity"
7 android:orientation="vertical"
8 tools:ignore="MergeRootFrame" >
9
10 <Button
11 android:id="@+id/btnReadTxt"
12 android:layout_width="fill_parent"
13 android:layout_height="wrap_content"
14 android:text="读取TXT数据" />
15
16 <Button
17 android:id="@+id/btnReadRaw"
18 android:layout_width="fill_parent"
19 android:layout_height="wrap_content"
20 android:text="读取RAW数据" />
21
22 </LinearLayout>
4. 读写内部存储的文件数据
使用openFileOutput()方法获取内部文件的输出流与文件数据的写入,使用openFileInput()获取内部文件的输入流并将数据读取出来。
1 package com.example.readwriteexternaldata;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.FileNotFoundException;
6 import java.io.FileOutputStream;
7 import java.io.IOException;
8 import java.io.InputStreamReader;
9 import java.io.OutputStreamWriter;
10 import java.io.UnsupportedEncodingException;
11
12 import android.app.Activity;
13 import android.os.Bundle;
14 import android.os.Environment;
15 import android.view.View;
16 import android.widget.EditText;
17 import android.widget.TextView;
18 import android.widget.Toast;
19
20 public class MainActivity extends Activity {
21
22 private EditText editText;
23 private TextView txShow;
24 File sdcard = Environment.getExternalStorageDirectory();
25
26 @Override
27 protected void onCreate(Bundle savedInstanceState) {
28 super.onCreate(savedInstanceState);
29 setContentView(R.layout.activity_main);
30
31 editText = (EditText) findViewById(R.id.editText);
32 txShow = (TextView) findViewById(R.id.txShow);
33
34 findViewById(R.id.btnRead).setOnClickListener(new View.OnClickListener() {
35
36 @Override
37 public void onClick(View v) {
38 File myfile = new File(sdcard, "This is my file.txt");
39 if (myfile.exists()) {
40 FileInputStream fis;
41 try {
42 fis = new FileInputStream(myfile);
43 InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
44 char[] input = new char[fis.available()];
45 isr.read(input);
46 isr.close();
47 fis.close();
48 String inString = new String(input);
49 txShow.setText(inString);
50 } catch (FileNotFoundException e) {
51 e.printStackTrace();
52 } catch (UnsupportedEncodingException e) {
53 e.printStackTrace();
54 } catch (IOException e) {
55 e.printStackTrace();
56 }
57 }
58 }
59 });
60
61 findViewById(R.id.btnWrite).setOnClickListener(new View.OnClickListener() {
62
63 @Override
64 public void onClick(View v) {
65 File myfile = new File(sdcard, "This is my file.txt");
66 //如果手机有sd卡,才执行
67 if (!sdcard.exists()) {
68 Toast.makeText(getApplicationContext(), "当前系统不具备SD卡目录", Toast.LENGTH_LONG).show();
69 return;
70 }
71 try {
72 myfile.createNewFile();
73 Toast.makeText(getApplicationContext(), "文件创建完成!", Toast.LENGTH_LONG).show();
74 FileOutputStream fos = new FileOutputStream(myfile);
75 OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
76 osw.write(editText.getText().toString());
77 osw.flush();
78 osw.close();
79 fos.close();
80 Toast.makeText(getApplicationContext(), "文件写入完成!", Toast.LENGTH_LONG).show();
81
82 } catch (IOException e) {
83 e.printStackTrace();
84 }
85 }
86 });
87
88 }
89
90 }
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:tools="http://schemas.android.com/tools"
3 android:id="@+id/container"
4 android:layout_width="match_parent"
5 android:layout_height="match_parent"
6 android:orientation="vertical"
7 tools:context="com.example.readwriteexternaldata.MainActivity"
8 tools:ignore="MergeRootFrame" >
9
10 <EditText
11 android:id="@+id/editText"
12 android:layout_width="fill_parent"
13 android:layout_height="wrap_content"
14 android:text="输入要保存的数据"
15 android:textAppearance="?android:attr/textAppearanceLarge" />
16
17 <Button
18 android:id="@+id/btnWrite"
19 android:layout_width="fill_parent"
20 android:layout_height="wrap_content"
21 android:text="写入数据" />
22
23 <Button
24 android:id="@+id/btnRead"
25 android:layout_width="fill_parent"
26 android:layout_height="wrap_content"
27 android:text="读入数据" />
28
29 <TextView
30 android:id="@+id/txShow"
31 android:layout_width="fill_parent"
32 android:layout_height="wrap_content"
33 android:text="显示读到的数据"
34 android:textAppearance="?android:attr/textAppearanceLarge" />
35
36 </LinearLayout>
5. 读取外部存储的文件数据
使用Environment.getExternalStorageDirectory()获取系统SD卡路径,并使用File类进行后续的操作。要获得相应的权限。
点击"写入数据"Button,将上方EditText里面的内容写到文件"This is my file.txt"中;点击"读入数据"Button,将"This is my file.txt"中的内容显示在下面的TextView中。
1 package com.example.readwriteinternaldata;
2
3 import java.io.FileInputStream;
4 import java.io.FileNotFoundException;
5 import java.io.FileOutputStream;
6 import java.io.IOException;
7 import java.io.InputStreamReader;
8 import java.io.OutputStreamWriter;
9 import java.io.UnsupportedEncodingException;
10
11 import android.app.Activity;
12 import android.content.Context;
13 import android.os.Bundle;
14 import android.view.View;
15 import android.widget.EditText;
16 import android.widget.TextView;
17 import android.widget.Toast;
18
19 public class MainActivity extends Activity {
20
21 private String fileName = "test";
22
23 private TextView txShow;
24 private EditText et;
25
26 @Override
27 protected void onCreate(Bundle savedInstanceState) {
28 super.onCreate(savedInstanceState);
29 setContentView(R.layout.activity_main);
30
31 et = (EditText) findViewById(R.id.et);
32 txShow = (TextView) findViewById(R.id.txShow);
33
34 findViewById(R.id.btnWrite).setOnClickListener(new View.OnClickListener() {
35
36 @Override
37 public void onClick(View v) {
38 try {
39 FileOutputStream fos = openFileOutput(fileName, Context.MODE_PRIVATE);
40 OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
41 osw.write(et.getText().toString());
42 //flush可以保证输出缓冲区的内容
43 //注意关闭顺序
44 osw.flush();
45 fos.flush();
46 osw.close();
47 fos.close();
48 Toast.makeText(getApplicationContext(), "写入完成", Toast.LENGTH_LONG).show();
49 } catch (FileNotFoundException e) {
50 e.printStackTrace();
51 } catch (UnsupportedEncodingException e) {
52 // TODO Auto-generated catch block
53 e.printStackTrace();
54 } catch (IOException e) {
55 // TODO Auto-generated catch block
56 e.printStackTrace();
57 }
58 }
59 });
60
61 findViewById(R.id.btnRead).setOnClickListener(new View.OnClickListener() {
62
63 @Override
64 public void onClick(View v) {
65 try {
66 FileInputStream fis = openFileInput(fileName);
67 InputStreamReader is = new InputStreamReader(fis, "UTF-8");
68 char input[] = new char[fis.available()];
69 is.read(input);
70 is.close();
71 fis.close();
72 String readed = new String(input);
73 txShow.setText(readed);
74
75 } catch (FileNotFoundException e) {
76 e.printStackTrace();
77 } catch (UnsupportedEncodingException e) {
78 // TODO Auto-generated catch block
79 e.printStackTrace();
80 } catch (IOException e) {
81 // TODO Auto-generated catch block
82 e.printStackTrace();
83 }
84 }
85 });
86 }
87
88 }
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:tools="http://schemas.android.com/tools"
3 android:id="@+id/container"
4 android:layout_width="match_parent"
5 android:layout_height="match_parent"
6 android:orientation="vertical"
7 tools:context="com.example.readwriteinternaldata.MainActivity"
8 tools:ignore="MergeRootFrame" >
9
10 <EditText
11 android:id="@+id/et"
12 android:layout_width="fill_parent"
13 android:layout_height="wrap_content"
14 android:text="在这里输入内容" />
15
16 <Button
17 android:id="@+id/btnWrite"
18 android:layout_width="fill_parent"
19 android:layout_height="wrap_content"
20 android:text="保存数据" />
21
22 <Button
23 android:id="@+id/btnRead"
24 android:layout_width="fill_parent"
25 android:layout_height="wrap_content"
26 android:text="读取数据" />
27
28 <TextView
29 android:id="@+id/txShow"
30 android:layout_width="fill_parent"
31 android:layout_height="wrap_content"
32 android:textAppearance="?android:attr/textAppearanceLarge" />
33
34 </LinearLayout>
1 <?xml version="1.0" encoding="utf-8"?>
2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 package="com.example.readwriteinternaldata"
4 android:versionCode="1"
5 android:versionName="1.0" >
6
7 <uses-sdk
8 android:minSdkVersion="14"
9 android:targetSdkVersion="19" />
10
11 <application
12 android:allowBackup="true"
13 android:icon="@drawable/ic_launcher"
14 android:label="@string/app_name"
15 android:theme="@style/AppTheme" >
16 <activity
17 android:name="com.example.readwriteinternaldata.MainActivity"
18 android:label="@string/app_name" >
19 <intent-filter>
20 <action android:name="android.intent.action.MAIN" />
21
22 <category android:name="android.intent.category.LAUNCHER" />
23 </intent-filter>
24 </activity>
25 </application>
26
27 </manifest>