package com.insigma.group1.yepengfei.io; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; import java.io.Writer; import java.net.URL; import java.net.URLConnection; import java.util.Iterator; import com.insigma.group2.jianghaiting.Test.fileinputStream; public class FileHelper { private int buffer_size = 1024; public void setBuffer_size(int bufferSize) { buffer_size = bufferSize; } /** * 以字节为单位将一个单独的文件进行拷贝,适合图片,视频和音频的拷贝 * * @param curFile * ,要拷贝的源文件 * @param destFile * ,拷贝到的目标文件 */ public void copyFileByByte(File srcFile, File destFile) { try { // inputStream从源文件中读取,outputStream将数据输出到目标文件 InputStream inputStream = new BufferedInputStream( new FileInputStream(srcFile)); OutputStream outputStream = new BufferedOutputStream( new FileOutputStream(destFile)); int len = -1; byte[] buf = new byte[buffer_size]; // 先读再写 while ((len = inputStream.read(buf)) != -1) { outputStream.write(buf, 0, len); outputStream.flush(); } // 关闭流 outputStream.close(); inputStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 以字符为单位将一个单独的文件进行拷贝,适合文本文件的拷贝 * * @param curFile * ,要拷贝的源文件 * @param destFile * ,拷贝到的目标文件 */ public void copyFileByChar(File srcFile, File destFile) { try { // reader从源文件中读取,writer将数据输出到目标文件 Reader reader = new BufferedReader(new FileReader(srcFile)); Writer writer = new BufferedWriter(new FileWriter(destFile)); char[] cbuf = new char[buffer_size]; int len = -1; while ((len = reader.read(cbuf)) != -1) { writer.write(cbuf, 0, len); writer.flush(); } // 关闭流 writer.close(); reader.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 将一个文件夹进行拷贝 * * @param curFile * ,要拷贝的源文件夹 * @param destFile * ,拷贝到的目标文件夹 * @see copyFileByByte(File srcFile, File destFile) */ public void copyFolder(File srcFile, File destFile) { // 如果目标文件夹不存在则创建 if (!destFile.exists()) destFile.mkdirs(); // 列出srcFile中的所有文件和文件夹 File[] files = srcFile.listFiles(); File tmpFile; for (File file : files) { if (file.isFile()) { // 如果file是文件 tmpFile = new File(destFile.getAbsoluteFile() + File.separator + file.getName()); copyFileByByte(file, tmpFile); } else { // 如果file是文件夹 tmpFile = new File(destFile.getAbsoluteFile() + File.separator + file.getName()); copyFolder(file, tmpFile); } } } /** * 以字节为单位将一个单独的文件进行剪切,适合图片,视频和音频的拷贝 * * @param srcFile * ,要剪切的源文件 * @param destFile * ,剪切到的目标文件 */ public void cutFileByByte(File srcFile, File destFile) { copyFileByByte(srcFile, destFile); deleteFile(srcFile); } /** * 以字符为单位将一个单独的文件进行剪切,适合图片,视频和音频的拷贝 * * @param srcFile * ,要剪切的源文件 * @param destFile * ,剪切到的目标文件 */ public void cutFileByChar(File srcFile, File destFile) { copyFileByChar(srcFile, destFile); deleteFile(srcFile); } /** * 剪切文件夹 * @param srcFile ,要剪切的源文件夹 * @param destFile,剪切到的目标文件夹 */ public void cutFolder(File srcFile, File destFile) { copyFolder(srcFile, destFile); deleteFolder(srcFile); } /** * 删除文件 * * @param srcFile * ,需要删除的文件 */ public void deleteFile(File srcFile) { srcFile.delete(); } /** * 删除文件夹以及文件夹下面的所有文件 * * @param srcFile */ public void deleteFolder(File srcFile) { File[] files = srcFile.listFiles(); for (File file : files) { if (file.isFile()) { //如果是文件册删除 file.delete(); } else { //如果是路径册进入该文件夹 deleteFolder(file); } } srcFile.delete();//在删除文件后再删除该文件夹 } /** * 从url下载文件到本地文件destFile * @param url * @param destFile */ public void downloadFromWeb(URL url, File destFile) { try { URLConnection urlConnection=url.openConnection(); InputStream inputStream=new BufferedInputStream(urlConnection.getInputStream()); OutputStream outputStream=new BufferedOutputStream(new FileOutputStream(destFile)); byte[] b=new byte[buffer_size]; int len=-1; while((len=inputStream.read(b))!=-1) { outputStream.write(b); outputStream.flush(); } //关闭流 outputStream.close(); inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }