标签:
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();}
完整代码下载:
文件内容为: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();}}});
标签:
原文地址:http://www.cnblogs.com/LiHuiGe8/p/5604725.html