`

io文件复制读写以及打gz和zip压缩包,递归删除文件以及文件夹

    博客分类:
  • java
 
阅读更多
package com.my.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.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.nio.channels.FileChannel;
import java.util.Date;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
* 文件复制以缓冲区方式
* @author Mengyao
*
*/
public class FileCopyTest {


public static void main(String[] args) {
//这个镜像文件4.05GB,本地复制耗时92秒
//copyFile_buffered(new File("D:/mengyao/资料/hadoop/linux/CentOS-6.4-x86_64-bin-DVD1.iso"),"D:/CentOS-6.4-x86_64-bin-DVD1.iso");
//这个镜像文件4.05GB,本地复制耗时76秒
//copyFile_buffered(new File("D:/mengyao/资料/hadoop/linux/CentOS-6.4-x86_64-bin-DVD1.iso"),"D:/CentOS-6.4-x86_64-bin-DVD1.iso");
//读取文件内容
//System.out.println(copyFile_text(new File("D:/new fields/1.txt")));
//将文件压缩成test.gz,用于单个文件
//getZip(new File("D:/new fields/1.txt"), "D:/new fields/test.gz");
//将多个文件打成压缩包.zip
//getZips(new File[]{new File("D:/new fields/1.txt"),new File("D:/new fields/2.txt"),new File("D:/new fields/3.txt")}, "D:/new fields/files.zip");
//创建文本文件
//createFile_Text(new File("D:/new fields/textEncoding.txt"));
//读取文本文件
//System.out.println(readFile_text(new File("D:/new fields/textEncoding.txt")));
                //递归删除某个文件夹下所有文件以及文件夹
                //deleteAllFile(new File("D:/new fields"));



}

/**
* 复制文件
* @param file 源文件
* @param TargetPath 目标路径
*/
public static void copyFile_buffered(File file,String TargetPath) {
if (file.exists()&&!TargetPath.isEmpty()) {
BufferedInputStream in=null;
BufferedOutputStream out=null;
try {
System.out.println(new Date());
in=new BufferedInputStream(new FileInputStream(file));
out=new BufferedOutputStream(new FileOutputStream(TargetPath));
byte[] bytes=new byte[1024];
int len=0;
while (-1!=(len=in.read(bytes))) {
out.write(bytes, 0, len);
}
System.out.println(new Date());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
in.close();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
        } else {
            System.out.println("文件不存在或者未指定目标路径!");
        }
//System.out.println("文件名:"+file.getName()+"\n文件所在路径:"+file.getParent()+"\n文件全路径:"+file.getPath()+file.getTotalSpace()+"\n文件是否存在:"+file.exists()+"\n文件是否路径:"+file.isDirectory());
}

/**
*
* 复制文件
* @param file 源文件
* @param TargetPath 目标路径
*/
public static void copyFile_channel(File file,String TargetPath){
FileInputStream fi = null;
        FileOutputStream fo = null;
        FileChannel in = null;
        FileChannel out = null;
        try {
            fi=new FileInputStream(file);
            fo=new FileOutputStream(TargetPath);
            in=fi.getChannel();//得到对应的文件通道
            out=fo.getChannel();//得到对应的文件通道
            in.transferTo(0, in.size(), out);//连接两个通道,并且从in通道读取,然后写入out通道
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fi.close();
                in.close();
                fo.close();
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
}

/**
* 获取文本文件中的内容
* @param file
* @return
*/
public static String copyFile_text(File file){
BufferedReader in=null;
StringBuilder sb=null;
try {
in=new BufferedReader(new FileReader(file));
String str;
sb=new StringBuilder();
while ((str=in.readLine())!=null) {
sb.append(str+"\n");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}

return sb.toString();
}

/**
* 生成一个gz文件:java.util.zip.Adler32 //速度快;java.util.zip.CRC32 //慢一些,但更准确
* @param file 源文件
* @param targetPath 新文件路径
*/
public static void getZip(File file,String targetPath){
BufferedReader in=null;
BufferedOutputStream out=null;
BufferedReader in2=null;
try {
//生成test.zip文件
in=new BufferedReader(new FileReader(file));
out=new BufferedOutputStream(new GZIPOutputStream(new FileOutputStream(targetPath)));
int c;
while ((c=in.read())!=-1) {
out.write(c);
}
in.close();
out.close();
//读取test.zip文件中的内容
in2=new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(targetPath))));
String str;
while ((str=in2.readLine())!=null) {
System.out.println(str);
}
in2.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
in.close();
out.close();
in2.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

/**
* 生成多个zip文件:java.util.zip.Adler32 //速度快;java.util.zip.CRC32 //慢一些,但更准确
* @param file 源文件
* @param targetPath 新文件路径
*/
public static void getZips(File[] files,String targetPath){
FileInputStream in=null;
ZipOutputStream out=null;
try {
out= new ZipOutputStream(new FileOutputStream(targetPath)); 
byte[] buffer = new byte[1024];
//需要同时下载的两个文件result.txt ,source.txt 
//File[] file1 = {new File("e:/a.txt"),new File("e:/b.txt"),new File("e:/aa.txt"),new File("e:/bb.txt")}; 
for(int i=0;i<files.length;i++) {
    in = new FileInputStream(files[i]); 
    out.putNextEntry(new ZipEntry(files[i].getName())); 
    int len; 
    //读入需要下载的文件的内容,打包到zip文件 
    while((len = in.read(buffer))>0) { 
    out.write(buffer,0,len);  
    } 
    

out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
out.closeEntry(); 
in.close();
} catch (IOException e) {
e.printStackTrace();
}

}

public static void createFile_Text(File file){
//获取到JVM中所设置的字符集编码, JVM是从系统变量file.encoding中读取操作系统的默认编码的字符集,来设置JVM的字符集编码的。
final String encoding = System.getProperty("file.encoding"); 
    Writer out=null;
try {
if (!file.exists()) 

    new File(file.getParent()).mkdirs(); 
    file.createNewFile(); //文件不存在,建立 

out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), encoding));      
out.write("大量文字内容,例如" +
"日志文件" +
"文本追加"); 

} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
out.flush(); 
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

public static String readFile_text(File file) {
final String encoding = System.getProperty("file.encoding");
InputStreamReader in=null;
BufferedReader out=null;
StringBuffer sb=null;

    try {
//文本文件编码是UTF-8,如果是其它,请修改下面 
in = new InputStreamReader(new FileInputStream(file), encoding); 
out = new BufferedReader(in); 
String str=out.readLine();
sb=new StringBuffer();
while(str!=null){ 
    sb.append(str+"\n");
    str=out.readLine();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}  

return sb.toString();
}

       /**
* 递归删除某个文件夹下所有文件以及文件夹
* @param file
*/
public static void deleteAllFile(File file){
//如果是文件或者是空文件夹则直接删除
if (file.isFile()||file.list().length==0) {
file.delete();
}else {
//获取到该文件夹下的子文件夹下所有的文件
File[] files=file.listFiles();
//循环得到子文件的所在路径
for (File f : files) {
//调用自身实现递归删除
deleteAllFile(f);
//当所有的空文件夹及非空文件夹下的文件被删除后则删除自身
f.delete();
}
}
}

}

以上代码复制可用
分享到:
评论

相关推荐

    Java中递归逻辑循环调用解压zip里面所有的压缩包

    Java中递归逻辑循环调用解压zip里面所有的压缩包 Java中递归逻辑循环调用解压zip里面所有的压缩包

    基于Java向zip压缩包追加文件

    在Java编程中,向现有的ZIP压缩包追加文件通常需要经过解压、修改、再压缩的步骤,因为标准的Java ZIP库(如`java.util.zip`包)并不直接支持追加到已存在的ZIP文件。本篇文章将深入探讨如何实现这个功能,主要关注...

    java 打包文件(文件夹)为 zip压缩包 java 压缩文件

    在Java编程环境中,打包文件或文件夹到zip压缩包是一项常见的任务,这通常涉及到I/O操作和文件处理。`ZIPUtil`可能是一个自定义的工具类,用于简化这个过程。以下是一些关于如何在Java中实现这个功能的关键知识点: ...

    递归删除,复制文件夹

    在给定的压缩包文件`RecursiveBrowseFolder`中,可能包含一个示例程序或代码库,演示如何实现上述的递归删除和复制文件夹功能。这个程序可能提供一个接口或函数,用户可以通过指定源文件夹和目标文件夹来执行递归...

    使用c语言递归删除指定文件夹下所有的文件(包含文件以及文件夹)

    本代码使用c语言,可执行递归删除指定文件夹下所有的文件(包含文件以及文件夹)的操作,注释详细,易于使用或修改

    递归删除指定文件夹下的指定文件夹及文件

    递归删除指定文件夹下的指定文件夹及文件,如删除文件夹中的所有.svn的文件夹及文件

    winform 文件操作 WM6.0 c# 遍历文件夹、复制文件、删除文件、复制文件内容

    本教程将详细介绍如何在这样的环境下遍历文件夹、复制文件、删除文件以及复制文件内容。 一、遍历文件夹 在C#中,我们可以使用`System.IO`命名空间下的`DirectoryInfo`类来遍历文件夹。以下是一个简单的示例: ``...

    C#复制文件夹(及文件夹下所有子文件夹和文件)

    为了实现文件夹及其子文件夹和文件的完整复制,我们需要采取递归的方法,即首先复制顶级目录,然后递归地复制每个子目录及其包含的所有文件和子目录。 ##### 2.2 具体实现 根据给定的部分代码,我们可以看到已经...

    C++ Zlib库实现zip文件压缩解压(支持递归压缩)

    本篇文章将详细介绍如何在`C++`中利用`Zlib`库实现对`zip`文件的压缩和解压,并特别关注其支持的递归压缩特性,以及如何将其与自动更新功能结合使用。 首先,我们需要理解`Zlib`库的基本原理。`Zlib`库基于`DEFLATE...

    QT递归删除文件夹,而不删除自己文件夹

    当递归删除文件夹时,会把自己文件夹也删除掉,比如要删除E:/testTemp/qftp 这个文件夹下多有文件,但会把qftp这个文件夹删除,本程序改进后将不删除qftp文件夹,但qftp文件夹下的所有文件都会删除

    Linux下rar及zip压缩包中批量替换某文件脚本

    在Linux环境下,对rar和zip压缩包进行批量替换文件的操作是一项常见的系统管理任务。这通常涉及到脚本编程,以便自动化处理大量的压缩文件。标题提到的`zip_replace.sh`和`rar_replace.sh`就是两个用于执行这个任务...

    递归删除指定类型的文件夹,递归删除指定类型的文件

    本主题主要探讨如何实现“递归删除指定类型的文件夹”和“递归删除指定类型的文件”,以及如何在文件夹内部进行深度搜索和深度删除。 首先,我们需要理解递归的概念。递归是一种解决问题的方法,它将一个问题分解为...

    java递归删除文件和文件夹.pdf

    "Java 递归删除文件和文件夹" Java 递归删除文件和文件夹是 Java 编程中一个常见的操作。该操作需要使用 Java 的 File 类来实现,通过递归调用来删除文件和文件夹。 File 类 在 Java 中,File 类是用于表示文件和...

    BAT批处理脚本-文件相关操作-删除指定路径下指定文件及文件夹外的所有文件及文件夹1.zip

    本压缩包文件“BAT批处理脚本-文件相关操作-删除指定路径下指定文件及文件夹外的所有文件及文件夹1.zip”包含了用于自动删除指定路径下非特定文件或文件夹的BAT脚本。以下是关于这个脚本和批处理技术的详细解释: *...

    递归解压指定文件夹zip文件

    本文将深入探讨如何使用递归方式解压指定文件夹内的ZIP文件,以及与之相关的技术细节。 首先,让我们理解什么是递归。递归是一种算法或编程方法,它通过调用自身来解决问题或执行任务。在解压文件夹时,如果文件夹...

    Shell脚本实现从文件夹中递归复制文件

    ### Shell脚本实现从文件夹中递归复制文件 #### 背景介绍 在日常工作中,有时我们可能需要从多层嵌套的文件夹结构中提取特定的文件或者进行数据整理工作。对于这种需求,手动操作显然是低效且耗时的。此时,利用...

    java文件夹及文件复制

    3. **递归复制文件夹**:当需要复制一个文件夹及其所有子文件夹和文件时,我们会使用递归方法。基本步骤如下: - 检查是否为文件夹:使用`File.isDirectory()`方法判断。 - 创建目标文件夹:如果目标路径不存在,...

    QT实现文件夹和文件的复制粘贴.docx

    为了实现文件夹的复制,可以使用递归函数qCopyDirectory,该函数将源文件夹的所有文件和子文件夹复制到目标文件夹中。 函数qCopyDirectory的原型为: ```c bool qCopyDirectory(const QDir& fromDir, const QDir& ...

    vs2017 下 windows C/C++ 删除文件夹以及文件夹里的所有文件,遍历嵌套删除文件及文件夹

    为了实现递归删除文件夹及其内容,我们需要在枚举到的每个文件或子文件夹上执行以下操作: - 如果是文件,使用`DeleteFile`函数删除。 - 如果是子文件夹,调用自身,递归删除子文件夹。 以下是一个简单的示例,...

    C#删除FTP文件夹(有子文件夹和子文件)的方法

    为了实现递归删除,我们需要先获取文件夹下的所有子文件夹和文件,然后再逐一删除。这里需要用到自定义的`FtpDirInfo`类来帮助获取这些信息: ```csharp private string[] GetDeleteFolderArray(string path) { ...

Global site tag (gtag.js) - Google Analytics