好久没有写过代码了,陌生的不得了,很多东西都忘记了,写了个小工具出现了一点小问题,弄了我整整一个晚上,后来虽然知道问题的所在,但是鉴于解 决起来还是很是复杂,心想一个小工具也没必要做到那么复杂,后来就想到了另一种解决方法,绕开了那个比较棘手的问题,有时候换种解决方案何尝不是一种很好 的解决问题的方法呢,赞!O(∩_∩)O~,以后要注意灵活变通,脑袋要变得好使一点才行,最近感觉老是在犯低级错误,小叶小叶,以后一定要注意吖!!!
上周五突然觉得现在的程序发包要按一定的文件格式,操作起来很是浪费时间,于是就想到了写一个小工具来自动完成这些工作,刚开始想用window的批处 理脚本去完成的,想了一下还是写个小程序好点,刚好公司的电脑上装了JDK,于是就选择用了java是实现,之前的想法是挺好,希望能够自动化一次性完成 解压,移动,压缩成最终发包形式,可是在读取PDF格式的技术支持文档的时候,就开始出错了,刚开始的时候还以为是我获取文件路径的错误,挺折磨人的,弄 了很久才知道原来是读取压缩PDF文件格式的问题,的确是菜鸟吖,到网上去查一下才知道原来JAVA基础类中文件流是无法读取PDF文件,不过网上有开源 的包可以实现,不过也仅仅是限于读取而已,但是否能够写入压缩文件流又是另一问题。于是选择放弃压缩的方式,直接生成发包形式的文件夹,然后再手工压缩, 这样子也很简便,而且也方便于检查里面的文件,其实也很是不错。
对文件的处理逻辑很是简单,可代码我写得一塌糊涂,像林MM所说的,就像是一坨shi,明天回公司再把代码贴出来,里面很多代码都是用于对文件的操作,有一点点算法的思想在里面,路过人的别忘了一定要拍砖哈!写个小东西都让我很是折磨。。。o(╯□╰)o
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.nio.channels.FileChannel;
import java.io.FileFilter;
import java.text.SimpleDateFormat;
import java.io.*;
/**
* Description: 此类用于对文件的简单操作
*
* @author yelinqing 2010-12-10
* @version 1.0.0
*/
public class ZipManager {
/**
* 解压缩文件 将D:\\zipfile\\old\\test.zip连同子目录解压到d:\\zipfile\\new\\目录下
* @param sourceZip 原文件zip
* @param outFileName 输出文件夹
* @throws IOException
*/
public void releaseZipToFile(String sourceZip, String outFileName)
throws IOException {
ZipFile zfile = new ZipFile(sourceZip);
System.out.println(zfile.getName());
Enumeration zList = zfile.entries();
ZipEntry ze = null;
byte[] buf = new byte[1024];
while (zList.hasMoreElements()) {
// 从ZipFile中得到一个ZipEntry
ze = (ZipEntry) zList.nextElement();
if (ze.isDirectory()) {
continue;
}
// 以ZipEntry为参数得到一个InputStream,并写到OutputStream中
OutputStream os = new BufferedOutputStream(new FileOutputStream(
getRealFileName(outFileName, ze.getName())));
InputStream is = new BufferedInputStream(zfile.getInputStream(ze));
int readLen = 0;
while ((readLen = is.read(buf, 0, 1024)) != -1) {
os.write(buf, 0, readLen);
}
is.close();
os.close();
System.out.println("Extracted: " + ze.getName());
}
zfile.close();
}
/**
* 取得指定目录下的所有文件列表,包括子目录.
*
* @param baseDir
* File 指定的目录
* @return 包含java.io.File的List
*/
private List<File> getSubFiles(File baseDir) {
List<File> ret = new ArrayList<File>();
// File base=new File(baseDir);
File[] tmp = baseDir.listFiles();
for (int i = 0; i < tmp.length; i++) {
if (tmp[i].isFile()) {
ret.add(tmp[i]);
}
if (tmp[i].isDirectory()) {
ret.addAll(getSubFiles(tmp[i]));
}
}
return ret;
}
/**
* 给定根目录,返回一个相对路径所对应的实际文件名.
*
* @param baseDir
* 指定根目录
* @param absFileName
* 相对路径名,来自于ZipEntry中的name
* @return java.io.File 实际的文件
*/
private File getRealFileName(String baseDir, String absFileName) {
String[] dirs = absFileName.split("/");
File ret = new File(baseDir);
if (dirs.length > 1) {
for (int i = 0; i < dirs.length - 1; i++) {
ret = new File(ret, dirs[i]);
}
}
if (!ret.exists()) {
ret.mkdirs();
}
ret = new File(ret, dirs[dirs.length - 1]);
return ret;
}
/**
* 判断文件夹是否存在 ,如果不存在 创建文件夹 并返回文件夹路径 OK
* @param fileDirectory 文件夹路径
* @return
*/
public String getFileDirectory(String fileDirectory) {
try {
if (!(new File(fileDirectory).isDirectory())) {
new File(fileDirectory).mkdirs();
}
} catch (Exception e) {
e.printStackTrace();
}
return fileDirectory;
}
/**
* 判断文件是否存在 ,如果不存在 返回空 OK
* @param filepath 文件路径
* @return
*/
public String getFile(String filepath) {
try {
if (new File(filepath).exists()) {
return filepath;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 复制单个文件
* @param srcFilename 原文件
* @param dstFilename 目标文件
* @return
*/
public String copyFlie(String srcFilename, String dstFilename) {
try {
FileChannel srcChannel = (new FileInputStream(srcFilename))
.getChannel();
FileChannel dstChannel = (new FileOutputStream(dstFilename))
.getChannel();
dstChannel.transferFrom(srcChannel, 0L, srcChannel.size());
srcChannel.close();
dstChannel.close();
} catch (Exception e) {
return null;
}
return dstFilename;
}
/**
* 复制整个文件夹内容
*
* @param oldPath
* String 原文件路径
* @param newPath
* String 复制后路径
* @return boolean
*/
public void copyFolder(String oldPath, String newPath) {
try {
(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()) {// 如果是子文件夹
copyFolder(oldPath + "/" + file[i], newPath + "/" + file[i]);
}
}
} catch (Exception e) {
System.out.println("复制整个文件夹内容操作出错");
e.printStackTrace();
}
}
/**
* 删除指定文件夹下 包含某一标示 的文件
* @param filePath
* @param fileEndName
*/
public void deleteContainDirs(String filePath, final String fileEndName) {
File[] delFiles = new File(filePath).listFiles(new FileFilter() {
public boolean accept(File name) {
if (name != null && name.isFile()
&& name.getName().toLowerCase().contains(fileEndName)) {
return true;
} else {
return false;
}
}
});
if (delFiles == null)
return;
for (File delfile : delFiles) {
delfile.delete();
}
}
public boolean deleteFile(File file) {
if (file.exists()) {
if (file.isFile())
return file.delete();
else if (file.isDirectory()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (!deleteFile(files[i]))
return false;
}
return file.delete();
} else
return false;
} else
return false;
}
/**
* 删除文件 (只能删除文件) OK
* @param paths 删除文件路径
*/
public void delFile(String paths) {
File files = new File(paths.replace("/", "\\"));
files.delete();
}
public static void main(String args[]) {
ZipManager manager = new ZipManager();
String FileName = "";
String oldFileName = "";
String oldFileNamePath = "";
while (true) {
System.out.println("按Enter键,操作继续。。。");
BufferedReader newin = new BufferedReader(new InputStreamReader(
System.in));
try {
FileName = newin.readLine();
} catch (IOException e)
{
System.out.println("发生异常!");
}
// 如果不存在zipfile文件,则创建
String zipFileDir = "D:\\zipfile";
File zipFileObject = new File(zipFileDir);
if (zipFileObject.exists()) {
try {
// 获取old中zip文件名 oldFileName
String oldDir = "D:\\zipfile\\old";
File folderObject = new File(oldDir);
if (folderObject.exists()) {
List<File> oldFileList = new ArrayList<File>();
oldFileList = manager.getSubFiles(new File(oldDir));
if (oldFileList.size() > 0) {
File f = (File) oldFileList.get(0); // 只获取一个文件
oldFileNamePath = f.getPath();
oldFileName = f.getName();
}
else {
System.out.println("old文件夹内没有被解压缩文件!");
}
// 解压oldFileName文件
manager.releaseZipToFile(oldFileNamePath,
"D:\\zipfile\\new");
// 备份old
manager.copyFlie(oldFileNamePath,
"D:\\zipfile\\backup\\" + oldFileName);
// 删除old
manager.delFile(oldFileNamePath);
// 将。c 。h .lib三个文件分别放到创建放入src inc lib三个文件夹中
String newDir = "D:\\zipfile\\new\\";
String newFileNamePath = "";
String newFileName = "";
File newfolderObject = new File(newDir);
if (newfolderObject.exists()) {
List<File> fileList = new ArrayList<File>();
fileList = manager.getSubFiles(new File(newDir));
for (int i = 0; i < fileList.size(); i++) {
File f = (File) fileList.get(i);
newFileNamePath = f.getPath();
newFileName = f.getName();
if (newFileName.toLowerCase().contains(".c")) {
// .c文件
manager.copyFlie(newFileNamePath,
"D:\\zipfile\\new\\ucweb\\src\\"
+ newFileName);
manager.delFile(newFileNamePath);
System.out.println(newFileNamePath
+ "newFileName");
} else if (newFileName.toLowerCase().contains(
".h")) {
// .h文件
manager.copyFlie(newFileNamePath,
"D:\\zipfile\\new\\ucweb\\inc\\"
+ newFileName);
manager.delFile(newFileNamePath);
}
else if (newFileName.toLowerCase().contains(
".lib")) {
// .lib文件
manager.copyFlie(newFileNamePath,
"D:\\zipfile\\new\\ucweb\\lib\\"
+ newFileName);
manager.delFile(newFileNamePath);
}
}
// 将目标文件移至result文件夹内
SimpleDateFormat sDateFormat = new SimpleDateFormat(
"yyyyMMddhhmmss");
String date = sDateFormat
.format(new java.util.Date());
String resFolderName = "MTK_UC_70_" + date
+ "_BID_厂商_机型";
manager.copyFolder("D:\\zipfile\\new\\",
"D:\\zipfile\\result\\" + resFolderName);
System.out
.println("========================================================");
System.out.println("最终结果目标文件位于:"
+ "D:\\zipfile\\result\\" + resFolderName);
System.out
.println("========================================================");
}
else {
System.out.println("new文件夹内没有被压缩文件!");
}
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
System.out.println("执行完毕!!!");
System.out
.println("========================================================");
}
else {
String resDir = manager.getFileDirectory("D:\\zipfile\\result");
String oldDir = manager.getFileDirectory("D:\\zipfile\\old");
String newDir = manager.getFileDirectory("D:\\zipfile\\new");
String incDir = manager
.getFileDirectory("D:\\zipfile\\new\\ucweb\\inc");
String libDir = manager
.getFileDirectory("D:\\zipfile\\new\\ucweb\\lib");
String srcDir = manager
.getFileDirectory("D:\\zipfile\\new\\ucweb\\src");
String newDocDir = manager
.getFileDirectory("D:\\zipfile\\new\\document");
String backupDir = manager
.getFileDirectory("D:\\zipfile\\backup");
System.out.println("首次使用,初始化工作目录:");
System.out
.println("========================================================");
System.out.println(resDir);
System.out.println(oldDir);
System.out.println(newDir);
System.out.println(incDir);
System.out.println(libDir);
System.out.println(srcDir);
System.out.println(newDocDir);
System.out.println(backupDir);
System.out
.println("========================================================");
System.out
.println("首次使用,请拷入技术支持文档至工作目录./zipfile/new/document !");
System.out
.println("========================================================");
}
}
}
}
发表评论
-
SoftReference,WeakReference&WeakHashMap
2011-05-12 16:57 937SoftReference,WeakReference& ... -
java http请求(一) ---- 工具
2011-05-12 16:55 1185http请求(一) ---- 工具 2 ... -
Java http请求(二) ---- 文件上传工具
2011-05-12 16:45 2096http请求(二) ---- 文件 ... -
Eclipse J2ME环境搭建
2010-12-17 20:58 1063我假设你已经装了Eclipse ... -
[andriod]运行程序后弹出: The application *** has stopped unexpectedly. Please try
2010-09-17 07:40 99831. 运行程序后弹出: The application ... -
JAVA实现post和get请求
2010-09-16 11:16 2658使用Java发送post请求 import java ... -
JSP中文显示乱码解决方案(转自csdn)
2010-05-10 15:03 1408JSP中文显示乱码解决方案 一、JSP页面显示乱码 二、表 ... -
SQLHelper类(JAVA版)
2010-05-04 20:45 1134/** *作者:devilishking *em ...
相关推荐
java 操作文件工具类java 操作文件工具类 java 操作文件工具类java 操作文件工具类java 操作文件工具类 java 操作文件工具类java 操作文件工具类java 操作文件工具类 java 操作文件工具类java 操作文件工具类java ...
# java实现对文件的各种操作的工具类 ## 可以实现的操作有: 1. 删除单个文件 2. 删除文件夹及文件夹下的文件 3. 使用文件流对单个文件进行复制 4. 复制整个文件夹内容(包含子文件夹中的所有内容) 5. ...
自定义的文件操作工具类通常是根据项目需求定制的,可能会包含上述一种或多种特性。具体实现细节,如类的结构、方法设计、异常处理机制等,都会根据实际需求而有所不同。在使用这个工具类时,需要注意其文档说明,以...
本篇将详细讲解标题为"完整的java文件读写工具类"所涉及的核心知识点,以及如何实现描述中提到的文件与目录管理功能。 1. **Java IO基础**: Java IO是Java标准库中的核心部分,提供了处理输入/输出流的类。在`...
此工具类只用于Java后端在操作Properties文件的时候写的工具类,方便properties文件的存取操作
综合这些信息,我们可以了解到这是一个用Java实现的FTP客户端工具,具备基本的FTP文件操作功能,如浏览、搜索和下载,并且提供了源代码供学习和参考。对于想要了解FTP客户端开发或者Java编程的学生和开发者来说,这...
java通过snakeyaml类能非常方便的操作,读写yaml文件。
这款工具极大地方便了日常的文件操作和数据库管理工作,提高了工作效率。 文件批量提取是该工具的核心特性之一。在日常工作中,我们经常需要处理大量的文件,如日志文件、图片、文档等。手动一个一个地处理不仅耗时...
文件工具类java操作文件工具类java操作文件工具类java操作文件工具类java操作文件工具类
java文件操作工具类是java中针对文件操作的一个工具类,可以方便的读取,下载,上传文件等操作,希望可以帮到大家。
大家可以不用在为操作文件发愁了! 小弟觉得这个工具类还不是很完善,高手在帮忙完善一下,别忘了共享出来哦!
Java编程语言以其跨平台、面向对象...总之,这个“JAVA写的下载小工具”是一个很好的学习资源,它涵盖了Java GUI编程、文件下载管理和打包部署等多个实用技能,对于初学者和有经验的开发者来说都是一份宝贵的学习材料。
一个非常好用的csv文件操作工具
通过上述技术,我们可以构建出一个功能完备的Java文件搜索工具,满足用户的各种搜索需求。这个工具不仅可以提高工作效率,也是学习Java编程和实践文件操作、正则表达式、日期时间处理、多线程等核心概念的好项目。
此文档为java中操作File对象的一个通用工具类,包含了byte数组和File类的相互转换
这对于新手学习Swing和文件操作提供了实际示例,同时也鼓励社区协作和代码质量的提升。 7. **功能扩展**: 作者提到有空会加强功能,这可能包括增加进度条显示复制进度、支持拖放操作、错误处理与异常提示、支持批量...
标签再次强调了这是一个用于将.class文件反编译为.java文件的工具,这表明其主要功能和适用场景。 在压缩包子文件的文件名称列表中,我们看到了"jd-gui-0-2"。这很可能是反编译工具的名字,例如JAD GUI的一个版本号...
1分让你得到sftp常用操作工具,工具实现如下操作: 1)得到当前工作目录地址 2)改变目录为配置的远程目录 3)取文件目录列表 4)取文件列表 5)下载文件 6)复制文件 7)删除文件 8)目录是否存在,文件是否存在 9)移动文件 ...
`dbf-jdbc-wisecoders`是一个Java库,它提供了对DBF文件的读写功能,使得开发者能够通过Java语言方便地操作这些文件。 这个工具包的主要特点和功能包括: 1. **JDBC接口**:`dbf-jdbc-wisecoders`通过提供一个类似...
总的来说,【Java下载文件小工具】不仅是一个实用的应用,也是Java学习者宝贵的参考资料,它涵盖了网络编程、文件操作、多线程和UI设计等多个Java开发的核心领域。通过深入研究和实践,初学者可以逐步掌握这些关键...