`
kzby2003
  • 浏览: 30009 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

文件操作的一些共通方法

 
阅读更多
注释是日文的,懒得翻译了
ファイル: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();
		}
	}

}
分享到:
评论

相关推荐

    东方通更换lic操作指南

    东方通 License 更换操作指南是指在东方通 7.0 认证中,License 文件的更换操作步骤。由于东方通 7.0 认证目前认证并非永久性,因此需要定期更换 License 文件以确保认证的连续性。 License 文件的重要性 ...

    UltraISO软碟通安装ISO文件的操作方法,怎么打开iso镜像文件的操作方法

    UltraISO软碟通安装ISO文件的操作方法 我们先打开UltraISO软碟通软件,文件→→打开你想要安装的ios文件→打开 就可以看到内容了 然后我们在菜单栏中点击工具→加载到虚拟光驱(或者快捷键:F6)→加载即可。 ...

    YRC1000 操作说明书_共通編.pdf

    根据提供的文件信息,我们可以了解到《YRC1000 操作说明书_共通編.pdf》这本手册与安川机器人有关。YRC1000是安川公司生产的一款机器人控制器,用于控制和管理机器人执行各项任务。在这份操作说明书中,它详细介绍了...

    C#中读写INI文件的方法详解

    总结来说,虽然.NET Framework没有内置对INI文件操作的支持,但通过调用Win32 API函数,并借助C#的互操作技术,我们依然可以在C#中方便地处理INI文件。这种方法不仅保留了INI文件的灵活性和易用性,同时也充分发挥了...

    小鹅通视频下载方法,文件很全,下载直接安装就可用

    标题中的“小鹅通视频下载方法”涉及到的是关于如何获取并保存小鹅通平台上的在线教育视频的内容。小鹅通是一个国内知名的在线教育平台,它提供了丰富的课程资源,包括直播和录播视频。由于版权和平台政策的限制,...

    Android文件操作实例

    以下是一些关于Android文件操作的关键知识点,结合源码学习能帮助开发者更好地掌握这一技能。 1. **文件路径**: Android中的文件路径分为两种类型:内部存储和外部存储。内部存储是应用程序私有的,不易被其他...

    东方通安装操作手册.docx

    东方通提供了一些基本的命令来管理域,例如创建域、删除域、启动域、停止域等。这些命令可以在 TongWeb7_HOME/bin 目录下执行。 7. 查看日志和进程 可以使用命令 tail -f /risen/soft/TongWeb7.0/logs/server.log ...

    昆仑通态触摸屏导出工程目录方法

    【昆仑通态触摸屏导出工程目录方法】是针对昆仑通态触摸屏用户的一项关键操作,主要用于备份工程、复制屏幕设置或解决设备被锁屏等问题。昆仑通态是一家知名的工控产品供应商,其触摸屏产品在工业自动化领域广泛应用...

    C#操作PSD文件源码示例

    例如,可能会有一个`LoadPSD`方法用于加载PSD文件,一个`GetLayers`方法用于获取PSD文件中的所有图层信息,以及`GetPixelData`方法用于获取指定图层的像素数据。 在C#中,要操作PSD文件,开发者需要理解PSD文件的...

    java 模拟windows文件操作

    - Java 7引入了`java.nio.file`包,其中`Files`类提供了异步的文件操作方法,如`Files.copy()`, `Files.move()`等。 10. **文件监控** - Java 7开始支持文件系统事件监控,通过`java.nio.file.FileSystemWatcher`...

    远程文件操作.rar

    在IT领域,远程文件操作和远程控制是两个关键概念,它们极大地扩展了用户对资源的访问范围,使得人们能够在任何地方处理存储在不同位置的文件。远程文件操作是指通过网络连接,用户可以在本地计算机上对远程服务器或...

    深证通金融数据交换平台文件传输系统客户端用户手册 V1.5.pdf

    总的来说,深证通金融数据交换平台文件传输系统客户端用户手册V1.5是金融从业者必备的参考资料,它为用户提供了全面、详尽的操作指导,有助于用户在不断更新的技术环境中有效利用该系统,保障金融数据的高效交换。

    腾讯通共享文件插件

    【腾讯通共享文件插件】是一款专为腾讯通(RTX)设计的辅助工具,旨在增强腾讯通的协作功能,特别是在远程支持和文件共享方面。腾讯通,全称为Real Time eXchange,是腾讯公司为企业打造的一款即时通讯软件,它集成...

    Matlab程序 对WAV文件高通和低通

    在本文中,我们将深入探讨如何使用MATLAB进行音频信号处理,特别是针对WAV文件的高通和低通滤波操作。MATLAB是一款强大的数学计算软件,广泛应用于信号处理、图像处理、数值分析等多个领域。 首先,`main.m`是整个...

    有关java文件操作的类和用法

    Java 文件操作是编程中不可或缺的一部分,它涉及到对磁盘上文件的读写、创建、删除等操作。在Java中,这些操作主要通过`java.io`包中的类和接口来实现。下面我们将详细讨论这个包中的一些核心类和它们的用法。 首先...

    昆仑触摸屏工程文件导入方法

    - 点击“文件操作”按钮进入文件管理界面。 3. **初始化U盘**: - 在文件管理界面中,系统会自动识别插入的U盘,并提示“初始化”。此时,请按照提示进行操作,等待初始化完成。 - 初始化完成后,系统会显示U盘...

    中标麒麟高级服务器操作系统V6.5安装东方通5.0中间件操作及配置手册.docx

    中标麒麟高级服务器操作系统 V6.5 安装东方通 5.0 中间件操作及配置手册是指在中标麒麟高级服务器操作系统 V6.5 环境下安装和配置东方通 5.0 中间件的操作步骤和配置方法。该手册涵盖了从安装 JDK 环境到配置东方通...

    java实现windows文件系统操作监控

    Java的`java.nio.file`包提供了丰富的文件操作接口,如`Files.setPosixFilePermissions()`和`Files.newFileChannel()`,可以用来设置权限和创建文件通道进行锁定。 7. **文件自动加密**:文件加密通常涉及对文件...

    昆仑通态样例_动画(.MCE文件)-中级教程.rar

    【描述】"昆仑通态样例_动画(.MCE文件)-中级教程rar,昆仑通态样例_动画(.MCE文件)-中级教程" 简短地重申了教程的主题,强调了它是关于昆仑通态软件中的动画功能,通过.MCE文件进行操作。这表明教程会深入到具体...

    java i/o包流式输入输出和文件操作

    Java I/O 包是Java平台的核心部分,它提供了丰富的类和接口用于处理输入输出操作,包括文件操作和流式输入输出。在这个主题中,我们将深入探讨如何使用Java进行文件管理和流处理。 首先,我们来看看`java.io`包中的...

Global site tag (gtag.js) - Google Analytics