注释是日文的,懒得翻译了
ファイル:file,即文件
再帰:递归
出力ストリームオブジェクト:输出流对象,即outputStream
フォルダ:文件夹
サブフォルダ:子文件夹
複数:多个
パス:path,路径
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class FileOperation {
/**
* ファイルの圧縮
* @param zipFileName 圧縮されたファイルの名前
* @param inputFileName 圧縮する前のファイル名
* @throws Exception
*/
public void zipFile(String zipFileName, String inputFileName) throws IOException {
ZipOutputStream out = new ZipOutputStream(
new FileOutputStream(zipFileName));
File inputFile = new File(inputFileName);
this.zipFile(out, inputFile, "", true);
out.close();
}
/**
* 再帰フォルダ圧縮ファイル
* @param out 圧縮出力ストリームオブジェクト
* @param file 圧縮されるファイル
* @param base 再帰フォルダ
* @param first フォルダ/ファイルの判断
* @throws IOException
*/
private void zipFile(ZipOutputStream out, File file, String base, boolean first) throws IOException {
if (file.isDirectory()) {
File[] fl = file.listFiles();
if (first) {
first = false;
} else {
base = base + "/";
}
for (int i = 0; i < fl.length; i++) {
this.zipFile(out, fl[i], base + fl[i].getName(), first);
}
} else {
if (first) {
base = file.getName();
}
out.putNextEntry(new ZipEntry(base));
FileInputStream in = new FileInputStream(file);
int b;
while ((b = in.read()) != -1) {
out.write(b);
}
in.close();
}
}
/**
* フォルダを全部コピー
* @param oldPath 元ファイルのパス
* @param newPath コピー後のパス
* @throws IOException
*/
public void copyFolder(String oldPath, String newPath) throws IOException {
//フォルダが存在しない場合、新規作成する
new File(newPath).mkdirs();
File a = new File(oldPath);
String[] file = a.list();
File temp = null;
for (int i = 0; i < file.length; i++) {
if (oldPath.endsWith(File.separator)) {
temp = new File(oldPath + file[i]);
} else {
temp = new File(oldPath + File.separator + file[i]);
}
if (temp.isFile()) {
FileInputStream input = new FileInputStream(temp);
FileOutputStream output = new FileOutputStream(newPath + "/" +
temp.getName().toString());
byte[] b = new byte[1024 * 5];
int len;
while ((len = input.read(b)) != -1) {
output.write(b, 0, len);
}
output.flush();
output.close();
input.close();
}
//サブフォルダの場合
if (temp.isDirectory()) {
this.copyFolder(oldPath + "/" + file[i], newPath + "/" + file[i]);
}
}
}
/**
* フォルダを削除
* @param folderPath フォルダパスとフォルダ名
*/
public void delFolder(String folderPath) {
//フォルダにある内容を全部削除
this.delAllFile(folderPath);
String filePath = folderPath;
filePath = filePath.toString();
java.io.File myFilePath = new java.io.File(filePath);
//空きフォルダを削除
myFilePath.delete();
}
/**
* フォルダにあるファイルを全部削除
* @param path フォルダパス
*/
public void delAllFile(String path) {
File file = new File(path);
if (!file.exists()) {
return;
}
if (!file.isDirectory()) {
return;
}
String[] tempList = file.list();
File temp = null;
for (int i = 0; i < tempList.length; i++) {
if (path.endsWith(File.separator)) {
temp = new File(path + tempList[i]);
} else {
temp = new File(path + File.separator + tempList[i]);
}
if (temp.isFile()) {
temp.delete();
}
if (temp.isDirectory()) {
//先ずはフォルダにあるファイルを削除
this.delAllFile(path + "/" + tempList[i]);
//そして空きになったフォルダを削除
this.delFolder(path + "/" + tempList[i]);
}
}
}
/**
* 複数ファイル圧縮機能
* @param zipPath zipファイルのパス
* @param filesNames 指定したフォルダ(複数)
* @throws IOException
*/
public void zipFile(String zipPath, String[] filesNames) throws IOException {
File zipFile = new File(zipPath);
try {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(zipFile));
ZipOutputStream out = new ZipOutputStream(bos);
for (int i = 0; i < filesNames.length; i++) {
File file = new File(filesNames[i]);
this.readFile(file, out, file.getName());
}
out.close();
} catch (IOException e) {
}
}
/**
* 再帰してファイルを圧縮
* @param file 指定したファイル
* @param out 圧縮出力ストリームオブジェクト
* @param name 圧縮ファイルのファイル名
* @throws IOException
*/
private void readFile(File file, ZipOutputStream out, String name) throws IOException {
if (file.isDirectory()) {
File[] files = file.listFiles();
name = name.length() == 0 ? "" : name + "/";
for (int i = 0; i < files.length; i++) {
File tempFile = files[i];
this.readFile(tempFile, out, name + tempFile.getName());
}
} else {
out.putNextEntry(new ZipEntry(name));
byte[] data = new byte[1024];
FileInputStream inputStream = new FileInputStream(file);
BufferedInputStream buffer = new BufferedInputStream(inputStream, 1024);
int count;
while ((count = buffer.read(data, 0, 1024)) != -1) {
out.write(data, 0, count);
}
buffer.close();
}
}
}
分享到:
相关推荐
东方通 License 更换操作指南是指在东方通 7.0 认证中,License 文件的更换操作步骤。由于东方通 7.0 认证目前认证并非永久性,因此需要定期更换 License 文件以确保认证的连续性。 License 文件的重要性 ...
UltraISO软碟通安装ISO文件的操作方法 我们先打开UltraISO软碟通软件,文件→→打开你想要安装的ios文件→打开 就可以看到内容了 然后我们在菜单栏中点击工具→加载到虚拟光驱(或者快捷键:F6)→加载即可。 ...
C#中读写INI文件的方法详解,详细源代码介绍
在Python中,文件操作通常使用内置的open()函数来实现,该函数返回一个文件对象,该对象具有用于读写文件的各种方法。以下是对使用文件流操作文本文件的详细介绍,旨在达到约2000字的篇幅。 一、引言 文件是数据...
中标麒麟高级服务器操作系统 V6.5 安装东方通 5.0 中间件操作及配置手册是指在中标麒麟高级服务器操作系统 V6.5 环境下安装和配置东方通 5.0 中间件的操作步骤和配置方法。该手册涵盖了从安装 JDK 环境到配置东方通...
这个文件里面包含了java的IO流对文件的操作和java通道加内存映射对文件操作的源码
通过设计和调试一个简单的文件系统,主要是模拟文件操作命令的执行,来模拟文件管理,使学生对主要文件操作命令的实质和执行过程有比较深入的了解,掌握它们的基本实施方法。文件管理的主要任务是对用户文件和系统...
本文档中还介绍了逐步回归法,该方法用于解决多重共线性问题。逐步回归法可以逐步引入自变量,选择最优的模型。 知识点六:回归模型的建立 本文档中还介绍了回归模型的建立,包括模型的拟合情况和回归系数。回归...
印通6操作手册,具体操作方法,简介明了。初学者更容易接受。
昆仑通态的触摸屏注册表文件通过工具导出来的,有了这个可以获取设备ID进行深度加密,以及对系统定制化操作等
48K采样点,16bit位宽,双通道 的...这些扩展名有助于操作系统和应用程序识别文件格式。 广泛支持: 由于其简单的无损特性,PCM文件在各种音频应用中得到广泛支持,包括音乐制作、音频编辑、游戏开发和多媒体应用程序。
深证通金融数据交换平台文件传输系统客户端用户手册 V1.5,是深证通文件传输系统FDEP的最新版,不是FDAP。经过前两年的大版本升级,操作方式有了很大的变化。
深证通金融数据交换平台文件传输系统客户端用户手册 V1.5,是深证通文件传输系统FDEP的最新版,不是FDAP。经过前两年的大版本升级,操作方式有了很大的变化。
本程序通VC对Excel文件的操作,达到抛砖引玉的思维
文件操作是应用程序最为基本的功能之一,Win32 API和MFC均提供有支持文件处 理的函数和类,常用的有Win32 API的CreateFile()、WriteFile()、ReadFile()和MFC提供的CFile类等。一般来说,以上这些函数可以满足大多数 ...
vivado2019.2中通过verilog实现基于FPGA的低通滤波器,并提供testbench测试文件+含代码操作演示视频 运行注意事项:使用vivado2019.2或者更高版本测试,用软件打开FPGA工程,然后参考提供的操作录像视频跟着操作。...
简单的文件读写操作,分别用文件通道和文件流的方式,对文件进行读写转存,希望对读者有用,实现很简单.
重启电脑后不停点击小键方向键中的下键,选中"本地pe维护系统"后回车,进入pe后桌面有一个cgi备份还原和一个品牌通备份还原和一个说明文件,自行操作即可。 本软件备份和还原的操作必须在出现开机菜单时进行,本人...
移动即时通业务终端操作简明手册 (3).pdf,这是一份不错的文件