你的位置:首页 > 操作系统

[操作系统]文件处理工具类


文件处理:

常用操作:

  获得文件或文件夹的绝对路径和相对路径。  String path = File.getPath();//相对路径   String path = File.getAbsoultePath();//绝对路径     获得文件或文件夹的父目录  String parentPath = File.getParent();     获得文件或文件夹的名称  String Name = File.getName();     建立文件或文件夹  File.mkDir(); //建立文件夹   File.createNewFile();//建立文件     判断是文件或文件夹  File.isDirectory()     列出文件夹下的所有文件和文件夹名  File[] files = File.listFiles();     修改文件夹和文件名  File.renameTo(dest);     删除文件夹或文件  File.delete(); 

 增加:

//增加  //............................................分界线...............................................  /**   * 判断指定文件是否存在   * @param filePath   * @return   */  public static boolean isFileExist(String filePath) {    File file = new File(filePath);    return file.exists();  }    /**   * 创建一个文件,创建成功返回true   * @param filePath   * @return   */  public static boolean createFile(String filePath) {    try {      File file = new File(filePath);      if (!file.exists()) {        if (!file.getParentFile().exists()) {          //建立文件夹           file.getParentFile().mkdirs();        }        //创建一个空的文件        return file.createNewFile();      }    } catch (IOException e) {      e.printStackTrace();    }    return true;  }    /**   * 从一个输入流里写到一个指定的文件   * @param FilePath 要创建的文件的路径   * @param in   * @return   */  public static boolean writeFile(String FilePath, InputStream in) {    try {      //创建文件成功则继续,否则返回false      if (!createFile(FilePath)) {        return false;      }      FileOutputStream fos = new FileOutputStream(FilePath);      int readCount = 0;      int len = 1024;      byte[] buffer = new byte[len];      while ((readCount = in.read(buffer)) != -1) {        fos.write(buffer, 0, readCount);      }      fos.flush();      if (null != fos) {        fos.close();        fos = null;      }      if (null != in) {        in.close();        in = null;      }      return true;    } catch (IOException e) {      e.printStackTrace();    }    return false;  }    /**   * 将bitmap写入到指定路径的文件里   * @param bitmap  Bitmap对象   * @param destPath  指定的路径   * @param quality  压缩率,例如quality=30时,表示压缩70%; quality=100表示不压缩   */  public static void writeImage(Bitmap bitmap, String destPath, int quality) {    try {      FileAECS.deleteFile(destPath);      if (FileAECS.createFile(destPath)) {        FileOutputStream out = new FileOutputStream(destPath);        if (bitmap.compress(Bitmap.CompressFormat.JPEG, quality, out)) {          out.flush();          out.close();          out = null;        }      }    } catch (IOException e) {      e.printStackTrace();    }  }    /**   * 将数据写入一个文件   *   * @param destFilePath 要创建的文件的路径   * @param data     待写入的文件数据   * @param startPos   起始偏移量   * @param length    要写入的数据长度   * @return 成功写入文件返回true, 失败返回false   */  public static boolean writeFile(String destFilePath, byte[] data, int startPos, int length) {    try {      if (!createFile(destFilePath)) {        return false;      }      FileOutputStream fos = new FileOutputStream(destFilePath);      fos.write(data, startPos, length);      fos.flush();      if (null != fos) {        fos.close();        fos = null;      }      return true;    } catch (FileNotFoundException e) {      e.printStackTrace();    } catch (IOException e) {      e.printStackTrace();    }    return false;  }

删除:

//删除  //............................................分界线...............................................    /**   * 删除指定文件夹路径下所有文件,包括文件夹本身   * @param filePath 文件夹路径   */  public static void deleteAll(String filePath){    File file = new File(filePath);    deleteFiles(file);  }    /**   * 删除指定文件夹下所有文件,包括文件夹本身   * @param file File实例   */  public static void deleteFiles(File file) {    if (file.isDirectory()) {      File[] listFiles = file.listFiles();      for (int i = 0; i < listFiles.length; i++) {        deleteFiles(listFiles[i]);      }    }    file.delete();  }    /**   * 删除一个指定文件或文件夹   * @param filePath 需要被删除的文件或文件夹的路径   * @return   */  public static boolean deleteFile(String filePath) {    try {      File file = new File(filePath);      if (file.exists()) {        return file.delete();      }    } catch (Exception e) {      e.printStackTrace();    }    return false;  }

修改:

//修改  //............................................分界线..............................................  /**   * 批量更改指定文件夹下所有文件后缀   * @param file   * @param oldSuffix   * @param newSuffix   */  public static void ReFileNameSuffix(File file, String oldSuffix, String newSuffix) {    if (file.isDirectory()) {      File[] listFiles = file.listFiles();      for (int i = 0; i < listFiles.length; i++) {        ReFileNameSuffix(listFiles[i], oldSuffix, newSuffix);      }    } else {      file.renameTo(new File(file.getPath().replace(oldSuffix, newSuffix)));    }  }    /**   * 将一个文件拷贝到另外一个地方   * @param sourceFile  源文件地址   * @param destFile   目的地址   * @param shouldOverlay 是否覆盖   * @return   */  public static boolean copyFiles(String sourceFile, String destFile, boolean shouldOverlay) {    try {      if (shouldOverlay) {        deleteFile(destFile);      }      FileInputStream fi = new FileInputStream(sourceFile);      writeFile(destFile, fi);      return true;    } catch (FileNotFoundException e) {      e.printStackTrace();    }    return false;  }

读取:

//读取  //............................................分界线...............................................  /**   * 读取指定文件,返回以byte数组形式的数据   *   * @param filePath 要读取的文件路径名   * @return byte数组形式的数据   */  public static byte[] readFile(String filePath) {    try {      if (isFileExist(filePath)) {        FileInputStream fi = new FileInputStream(filePath);        return readInputStream(fi);      }    } catch (FileNotFoundException e) {      e.printStackTrace();    }    return null;  }    /**   * 从一个数量流里读取数据,返回以byte数组形式的数据。   * 需要注意的是,如果这个方法用在从本地文件读取数据时,一般不会遇到问题,但如果是用于网络操作,就经常会遇到一些麻烦(网络的不稳定性,available()方法的问题)。所以如果是网络流不应该使用这个方法。   *   * @param in 要读取的输入流   * @return   * @throws java.io.IOException   */  public static byte[] readInputStream(InputStream in) {    try {      ByteArrayOutputStream os = new ByteArrayOutputStream();      byte[] b = new byte[in.available()];      int length = 0;            while ((length = in.read(b)) != -1) {        os.write(b, 0, length);      }      b = os.toByteArray();      in.close();      in = null;      os.close();      os = null;      return b;    } catch (IOException e) {      e.printStackTrace();    }    return null;  }    /**   * 读取网络流   *   * @param in   * @return   */  public static byte[] readNetWorkInputStream(InputStream in) {    ByteArrayOutputStream os = null;    try {      os = new ByteArrayOutputStream();      int readCount = 0;      int len = 1024;      byte[] buffer = new byte[len];      while ((readCount = in.read(buffer)) != -1) {        os.write(buffer, 0, readCount);      }      in.close();      in = null;      return os.toByteArray();    } catch (IOException e) {      e.printStackTrace();    } finally {      if (null != os) {        try {          os.close();        } catch (IOException e) {          e.printStackTrace();        }        os = null;      }    }    return null;  }    /**   * 从resource的raw中读取文件数据,只能读取,不能写入   * @param Context   * @param test    例如R.raw.test   * @param Charset  编码格式 ,例如GBK、UTF-8、Unicode   * @return      String   */  public static String getRawTest(Context Context,int test,String Charset){    String String = null;    try{      //得到资源中的Raw数据流      InputStream in = Context.getResources().openRawResource(test);      //得到数据的大小      int length = in.available();         //缓存大小      byte [] buffer = new byte[length];      //读取数据      in.read(buffer);      //依test.txt的编码类型选择合适的编码,如果不调整会乱码      String = EncodingUtils.getString(buffer, Charset);      //关闭        in.close();      }catch(Exception e){       e.printStackTrace();          }    return String;  }    /**   * 从resource的asset中读取文件数据,只能读取,不能写入   * @param Context   * @param fileName    文件名   * @param Charset    编码格式,例如GBK、UTF-8、Unicode   * @return        String   */  public static String getAssetTest(Context Context,String fileName,String Charset){    String String = null;    try{      //得到资源中的asset数据流      InputStream in = Context.getResources().getAssets().open(fileName);      //得到数据的大小      int length = in.available();      //缓存大小      byte [] buffer = new byte[length];         //读取数据      in.read(buffer);           //依test.txt的编码类型选择合适的编码,如果不调整会乱码      String = EncodingUtils.getString(buffer, Charset);     }catch(Exception e){      e.printStackTrace();    }    return String;  }

sd卡处理相关:

//sd卡相关  //............................................分界线.........................................  /**   * 判断SD卡是否正常挂载   * @return true正常挂载   */  public static boolean hasSDCard() {    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {      return true;    } else {      return false;    }  }    /**   * 获得sd卡根目录即 /sdcard   * @return  File   */  public static File getSDCardRoot(){    if(hasSDCard()){      return Environment.getExternalStorageDirectory();    }    return null;  }

获取:

//获取  //............................................分界线.........................................  /**   * 获取文件夹大小   * @param file File实例   * @return long 单位为M   * @throws Exception   */  public static long getFolderSize(File file) throws Exception {    long size = 0;    File[] fileList = file.listFiles();    for (int i = 0; i < fileList.length; i++) {      if (fileList[i].isDirectory()) {        size = size + getFolderSize(fileList[i]);      } else {        size = size + fileList[i].length();      }    }    return size / (1024*1023);  }  /**   * 获得文件或文件夹的相对路径   * @param  file   * @return  String   */  public static String getFilePath(File file){    String str = file.getPath();    return str;      }    /**   * 获得文件或文件夹的绝对路径   * @param  file   * @return  String   */  public static String getFileAbsoultePath(File file){    String str = file.getAbsolutePath();    return str;  }