File是經過FileInputStream和FileOutputStream對文件進行操做。Context提供了以下兩個方法來打開本應用程序的數據文件將愛麗的文件IO流。FileInputStream openFileInput(String name):打開應用程序的數據文件夾下的name文件對應輸入流。FileOutputStream openFileOutput(String name,int mode):打開應用程序的數據文件夾下的name文件對應輸出流。參數:mode 指定打開文件的模式,該模式支持以下值:MODE_PRIVATE :該文件只能被當前程序讀寫。MODE_APPEND:以追加方式打開該文件,應用程序能夠向該文件中追加內容。MODE_WORLD_READABLE:該文件的內容能夠被其餘應用程序讀取。MODE_WORLD_WRITEABLE:該文件的內容可由其餘程序讀、寫。getDir(String name,int mode):在應用程序的數據文件夾下獲取或建立name對應的子目錄。File getFilesDir():獲取該應用程序的數據文件夾的絕對路徑。String[] fileList():返回該應用程序中的數據文件夾下的所有文件。deleteFile(String):刪除該應用程序的數據文件夾下的指定文件。
//建立文件的名稱public static final String FILE_NAME="myFile.txt";(1)建立文件代碼示例:
File file=new File(FileUtil.FILE_NAME);//文件是否存在if(!file.exists()){try {//文件不存在,就建立一個新文件file.createNewFile();System.out.println("文件已經建立了");} catch (IOException e) {e.printStackTrace();}}else{System.out.println("文件已經存在");System.out.println("文件名:"+file.getName());System.out.println("文件絕對路徑爲:"+file.getAbsolutePath());//是存在工程目錄下,因此System.out.println("文件相對路徑爲:"+file.getPath());System.out.println("文件大小爲:"+file.length()+"字節");System.out.println("文件是否可讀:"+file.canRead());System.out.println("文件是否可寫:"+file.canWrite());System.out.println("我呢間是否隱藏:"+file.isHidden());}
(2)刪除文件示例:
File file=new File(FileUtil.FILE_NAME);//文件是否存在if(file.exists()){file.delete();System.out.println("文件已經被刪除了");}
(3)爲文件重命名示例:
File file=new File(FileUtil.FILE_NAME);File newFile=new File("anotherFile.txt");file.renameTo(newFile);System.out.println("文件已經成功地被命名了"+file.getName());
注意:當咱們爲文件重命名時,僅僅操做的是文件自己,內部的內容不會改變。
//建立文件夾的名稱//public static final String FOLDER_NAME="NewFolder";//多級目錄,不能用//** File.separator路徑分隔符* 在文件夾的目錄結構中,只要任一級目錄不存在,那麼都會不存在。* 好比"NewFolder2"+File.separator+"separator2"此路徑,NewFolder2沒有存在,* 因此NewFolder2和separator2都不存在* */public static final String FOLDER_NAME="NewFolder"+File.separator+"separator";(1)建立文件夾代碼示例
File folder=new File(FileUtil.FOLDER_NAME);if(!folder.exists()){//建立文件夾,一旦存在相同的文件或文件夾,是不可能存在的。/** * 在文件夾的目錄結構中,只要任一級目錄不存在,那麼都會不存在。* 好比"NewFolder2"+File.separator+"separator2"此路徑,NewFolder2沒有存在,* 因此NewFolder2和separator2都不存在* */// folder.mkdir();/** 無論路徑是否存在,都會慢慢向下一級建立文件夾。* 因此建立文件夾咱們通常用此方法,肯定穩定性。* */folder.mkdirs();}File同時能夠表示文件或文件夾
(2)刪除文件夾
File folder=new File(FileUtil.FOLDER_NAME);if(folder.exists()){/** 在移除的時候,只會移除最下層的目錄,不會移除多層目錄。* */folder.delete();}
完整代碼下載:java
文件內容爲:1,這是使用UTF-8編寫的一個文本2,這是第二行代碼3,3行4,4行
<RelativeLayout xmlns:android=" http://schemas.android.com/apk/res/android"xmlns:tools=" http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#FFFFFF"tools:context="com.yuyan.android_file.MainActivity" ><Buttonandroid:id="@+id/readtxtBtn"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="讀取TXT數據" /></RelativeLayout>
private static final String TAG="ReadAssets";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.readtxtBtn).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//讀取的內容會隨着文件的改變而改變try {//讀取的是字節流InputStream is=getResources().getAssets().open("info.txt");//UTF-8編碼的指定是很重要的InputStreamReader isr=new InputStreamReader(is,"UTF-8");BufferedReader bfr=new BufferedReader(isr);String in="";while((in=bfr.readLine())!=null){Log.i(TAG, in);}// Log.i(TAG, bfr.readLine());} catch (IOException e) {e.printStackTrace();}}});}
<RelativeLayout xmlns:android=" http://schemas.android.com/apk/res/android"xmlns:tools=" http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.yuyan.android_raw.MainActivity" ><Buttonandroid:id="@+id/readrawBtn"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="讀取Raw文件夾中的數據" /></RelativeLayout>
private static final String TAG="RawData";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.readrawBtn).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {try {InputStream is=getResources().openRawResource(R.raw.info);InputStreamReader isr=new InputStreamReader(is,"UTF-8");BufferedReader bfr=new BufferedReader(isr);String instring="";while((instring=bfr.readLine())!=null){Log.i(TAG, instring);}} catch (NotFoundException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}});}
/data/data/<package name>/files 目錄下。
<package name>表明應用程序的包名。
<LinearLayout xmlns:android=" http://schemas.android.com/apk/res/android"xmlns:tools=" http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.yuyan.android_internaldata.MainActivity" ><EditTextandroid:id="@+id/et"android:layout_width="fill_parent"android:layout_height="wrap_content"android:hint="在這裏輸入內容" /><Buttonandroid:id="@+id/writeBtn"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="保存數據" /><Buttonandroid:id="@+id/readBtn"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="讀取數據" /><TextViewandroid:id="@+id/show"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout>
et=(EditText) findViewById(R.id.et);show=(TextView) findViewById(R.id.show);findViewById(R.id.writeBtn).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {try {//將文件數據寫到應用的內部存儲/** 注意:獲取流的方式經過openFileInput函數,指定文件名以及後綴* 參數1.文件名和後綴 2.文件模式* 保存在手機data/data/包名/files* */FileOutputStream fos=openFileOutput(fileName, Context.MODE_PRIVATE);OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");osw.write(et.getText().toString());//保證輸出緩衝區中的全部內容osw.flush();fos.flush();//後打開的先關閉,逐層向內關閉fos.close();osw.close();Toast.makeText(MainActivity.this, "寫入完成", Toast.LENGTH_LONG).show();} catch (FileNotFoundException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}});findViewById(R.id.readBtn).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {try {FileInputStream fis=openFileInput(fileName);InputStreamReader is=new InputStreamReader(fis,"UTF-8");//fis.available()文件可用長度char input[]=new char[fis.available()];is.read(input);is.close();fis.close();String readed=new String(input);show.setText(readed);} catch (FileNotFoundException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});
a,調用Environment的getExternalStorageState()方法判斷手機上是否插入了SD卡,而且應用程序具備讀寫SD卡的權限。例如使用以下代碼:
//若是手機已插入SD卡,且應用程序具備讀寫SD卡的能力,//下面語句返回trueEnvironment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
b,調用Environment的getExternalStorageDirectory()方法來獲取,外部存儲器,也就是SD卡的目錄.c,調用FileInputStream、FileOutPutStream、FileReader或FileWriter讀、寫SD卡里的文件。
<!-- 在SD卡中建立與刪除文件權限 --><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><!-- 向SD卡寫入數據權限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<LinearLayout xmlns:android=" http://schemas.android.com/apk/res/android"xmlns:tools=" http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".Read_InternalMemory" ><EditTextandroid:id="@+id/EtExternal"android:layout_width="fill_parent"android:layout_height="wrap_content"android:hint="在這裏輸入內容" /><Buttonandroid:id="@+id/BtnExternalSave"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="寫入數據" /><Buttonandroid:id="@+id/BtnEXternalRead"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="讀取數據" /><TextViewandroid:id="@+id/TvExternalShow"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout>
private String fileName="text";private TextView show;private EditText et;//判斷手機上是否已經插了sdcard// if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))//獲取當前sdcard的工做目錄File sdcard=Environment.getExternalStorageDirectory();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);show=(TextView) findViewById(R.id.TvExternalShow);et=(EditText) findViewById(R.id.EtExternal);//寫入數據findViewById(R.id.BtnExternalSave).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {File myfile=new File(sdcard,"this is my file.txt");if(!sdcard.exists()){Toast.makeText(getApplicationContext(), "當前系統不具有SD卡目錄", Toast.LENGTH_LONG).show();return;}try {myfile.createNewFile();Toast.makeText(getApplicationContext(), "文件已經建立完成", Toast.LENGTH_LONG).show();FileOutputStream fos=new FileOutputStream(myfile);OutputStreamWriter osw=new OutputStreamWriter(fos);osw.write(et.getText().toString());osw.flush();osw.close();fos.close();Toast.makeText(getApplicationContext(), "文件已經寫入完成", Toast.LENGTH_LONG).show();} catch (IOException e) {e.printStackTrace();}}});//讀取數據findViewById(R.id.BtnEXternalRead).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {File myfile=new File(sdcard,"this is my file.txt");try {FileInputStream fis=new FileInputStream(myfile);InputStreamReader isr=new InputStreamReader(fis, "UTF-8");char[] input=new char[fis.available()];isr.read(input);isr.close();fis.close();String in=new String(input);show.setText(in);} catch (FileNotFoundException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});