开发系统:Android4.4.2
开发平台:广州微嵌安卓工业平板
开发工具:eclipse
开发语言:Java
文件操作在各个开发语言中都是是使用的比较多,比较重要的部分,这次我们就来学习下在安卓系统的上是如何通过java编程来对文件进行的各种操作。
在Java中文件操作使用的一个类File,该类的一些基本方法如下:File file = new File(path); //该path应为绝对路径名createNewFile(); //创建新文件,如果文件不存在而且创建成功返回true,文件已存在返回falsedelete(); //删除文件,删除文件或目录成功返回true,如果删除的是目录,该目录必须是空目录才能删除成功exists(); //判断文件或目录是否存在getAbsolutePath(); //返回该文件的绝对路径名getName(); //获取该文件的文件名(与绝对路径名有区别)getParent(); //返回上一级目录名(返回值类型String)getParentFile(); //获取上一级目录(返回值类型File)isDirectory(); //判断该File实例是否是个目录isFile(); //判断该File实例是否是个文件list(); //获取该目录下的子目录名跟文件名(返回值类型String[])listFiles(); //获取该目录下的子目录跟文件(返回值类型File[])length(); //获取该文件的大小mkdir(); //创建新目录,创建成功返回truerenameTo(File); //将该文件重命名,也可以当作移动文件使用以上是File的一些常用的方法,下面我们就来使用这些方法实现一些文件的基本操作,包括文件的增、删、 查、复制/ 粘贴等
1、新建目录:
File file = new File(dirpath); //先是判断该目录是否存在,以存在则不再创建 if(file.exists()){ Toast.makeText(MainActivity.this, "该目录已存在", Toast.LENGTH_SHORT).show();}else{ try { //新建目录 if(!file.mkdir()){ Toast.makeText(MainActivity.this, "创建失败", Toast.LENGTH_SHORT).show(); return; }else{ Toast.makeText(MainActivity.this, "创建成功", Toast.LENGTH_SHORT).show(); } } catch (IOException e) { // TODO Auto-generated catch block Toast.makeText(MainActivity.this, "IOException", Toast.LENGTH_SHORT).show(); } }2、新建文件
File file = new File(filepath); //先是判断该文件是否存在,以存在则不再创建 if(file.exists()){ Toast.makeText(MainActivity.this, "该文件已存在", Toast.LENGTH_SHORT).show();}else{ try { //新建文件 if(!file.createNewFile()){ Toast.makeText(MainActivity.this, "创建失败", Toast.LENGTH_SHORT).show(); return; }else{ Toast.makeText(MainActivity.this, "创建成功", Toast.LENGTH_SHORT).show(); } } catch (IOException e) { // TODO Auto-generated catch block Toast.makeText(MainActivity.this, "IOException", Toast.LENGTH_SHORT).show(); } }3、获取目录下的子目录跟文件
File dir = new File(dirpath);//先判断dir是否是目录if(dir.isDirectiry()){ //获取该目录下的所有文件列表 File[] filelist = dir.listFiles(); //判断该列表下的具体某个文件是属于目录还是文件 for(File file:filelist){ if(file.isFile()){ Log.d("File",file.getName()); }else if(file.isDirectory()){ Log.d("Dir",file.getName()); } } }4、获取可以打开文件的应用程序
//获取可以打开该类文件的应用程序 private void openFile(File file) { Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(android.content.Intent.ACTION_VIEW); //获取该文件的文件类型 String type = getMIMEType(file); try{ //获取可以打开该类文件的应用,并且打开 intent.setDataAndType(Uri.fromFile(file), type); startActivity(intent); }catch(ActivityNotFoundException e){ //没有可以打开该类文件的应用,弹出所以应用让用户选择 intent.setDataAndType(Uri.fromFile(file), "*/*"); startActivity(intent); } }5、获取文件类型
//获取文件类型 private String getMIMEType(File file) { String type = ""; String name = file.getName(); //文件扩展名 String end = name.substring(name.lastIndexOf(".") + 1, name.length()).toLowerCase(); if (end.equals("m4a") || end.equals("mp3") || end.equals("wav")) { type = "audio"; } else if (end.equals("mp4") || end.equals("3gp")) { type = "video"; } else if (end.equals("jpg") || end.equals("png") || end.equals("jpeg") || end.equals("bmp") || end.equals("gif")) { type = "image"; } else if (end.equals("txt") || end.equals("doc") ) { type = "txt"; } else if (end.equals("zip") || end.equals("rar") || end.equals("taz") ) { type = "zip"; } else { //如果无法直接打开,跳出列表由用户选择 type += "*"; } type += "/*"; return type; }6、重命名或移动文件或目录
File oldFile = new File(oldName);File newFile = new File(newName); //先判断旧文件已存在并且新文件名没有被使用,就将旧文件重命名为新文件名if(oldFile.exists()&&(!newFile.exists()){ oldFile.renameTo(newFile); }7、复制粘贴文件
因为在Java中没有直接复制文件或目录的方法,所以这里的复制文件或目录得自己实现该方法:
复制文件:在新的路径中的新建一个同名的文件,通过读取原文件的数据,再将数据写进目标文件/*拷贝文件的操作,将原文件拷贝到目标文件 * resFile:需要拷贝的文件,不能是目录 * destFile:目标文件的完整路径名,应为新建的空文件,不能是目录 */private void copyfile(File resFile,File destFile){ try { //获取原文件的FileInputStream流,用于读取原文件中的数据 FileInputStream resread= new FileInputStream(resFile); //获取目标文件的FileInputStream流,用于将数据写进目标文件中 FileOutputStream destwrite = new FileOutputStream(destFile); byte[] buffer = new byte[1024*1024]; int cnt= 0; //判断是否已将原文件中的所有数据都全部写入目标文件 while(cnt<resFile.length()){ int a = 0; //从原文件中读取数据 a = resread.read(buffer); cnt+=a; //将读取到的数据写入目标文件 if(a<1024*1024) { destwrite.write(buffer,0, a); }else{ destwrite.write(buffer); } } //关闭流 resread.close(); destwrite.close(); } catch (FileNotFoundException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } }复制目录:先是获取源目录下的子目录跟文件,如果是文件则用复制文件的方法将文件复制进目标目录, 如果是目录则重复前面的操作,直到将该目录下所有的子文件跟子目录全复制完毕。/*拷贝目录 * resname:复制源文件或目录的完整路径名 * destname:需要拷贝到的目标目录的完整路径名 */ private void copy(String resname,String destname){ File destdir= new File(destname); File resdir = new File(resname); //先是判断源文件的类型 if(resdir.isDirectory()){ //判断目标目录是否存在,不存在则新建 if(!destdir.exists()){ destdir.mkdir(); } //获取原目录下的子文件跟目录 String[] list = resdir.list(); int i=0; while(i<list.length){ //递归调用该方法拷贝子目录中的子文件,这里传的参数应实时变换 copy(resname+"/"+list[i],destname+"/"+list[i]); i++; } } //判断原文件是属于文件类型 else if(resdir.isFile()){ try { if(!destdir.exists()){ destdir.createNewFile(); } //使用上面的复制文件的方法将原文件复制到目标文件 copyfile(resdir,destdir); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } }8、删除文件:
在Java中可以直接删除文件或目录,但是在删除目录时只能对空目录执行删除操作,所以在删除非空目录时,需将其目录下的所有子文件跟子目录删除掉,最后在删除该目录。//删除文件或目录,跟拷贝目录有点相似,通过递归调用该方法逐一的将目录中的子目录跟子文件都删除掉 public boolean deletefile(String name){ boolean deleteFlag = true; File dir = new File(name); try{ //先是判断删除文件的类型 if(dir.isDirectory()){ String[] list =dir.list(); int i=0; while(i<list.length && deleteFlag){ //将目录中的子目录跟子文件调用该方法逐一删除掉 deleteFlag = deletefile(name+"/"+list[i]); i++; } } //执行到这一步时dir只有两种情况:一、dir是个文件,二、dir是个空目录。该两种情况都可直接使用delete的方法删除掉 if(!dir.delete()){ return false; }else{ return true; } }catch(NullPointerException e){ return false; } }9、文件的读写操作
在拷贝文件的操作中就用到了文件的读写FileInputStream:从文件中读取数据 FileOutputStream:往文件中写入数据 构造方法: //获取原文件的FileInputStream流,用于读取原文件中的数据 FileInputStream in= new FileInputStream(file); int size = in.read(buffer); //获取目标文件的FileInputStream流,用于将数据写进目标文件中 FileOutputStream out = new FileOutputStream(file);out.write(buffer,0,size);以上就是在安卓系统的文件操作的一些最基本的操作,包括新建文件、目录,重命名,删除,复制粘贴,移动、文件读写等。这些的基本操作足够我们在日常的开发中对文件的操作需求。