JAVA写的文件操作小工具

 好久没有写过代码了,陌生的不得了,很多东西都忘记了,写了个小工具出现了一点小问题,弄了我整整一个晚上,后来虽然知道问题的所在,但是鉴于解 决起来还是很是复杂,心想一个小工具也没必要做到那么复杂,后来就想到了另一种解决方法,绕开了那个比较棘手的问题,有时候换种解决方案何尝不是一种很好 的解决问题的方法呢,赞!O(∩_∩)O~,以后要注意灵活变通,脑袋要变得好使一点才行,最近感觉老是在犯低级错误,小叶小叶,以后一定要注意吖!!!

   上周五突然觉得现在的程序发包要按一定的文件格式,操作起来很是浪费时间,于是就想到了写一个小工具来自动完成这些工作,刚开始想用window的批处 理脚本去完成的,想了一下还是写个小程序好点,刚好公司的电脑上装了JDK,于是就选择用了java是实现,之前的想法是挺好,希望能够自动化一次性完成 解压,移动,压缩成最终发包形式,可是在读取PDF格式的技术支持文档的时候,就开始出错了,刚开始的时候还以为是我获取文件路径的错误,挺折磨人的,弄 了很久才知道原来是读取压缩PDF文件格式的问题,的确是菜鸟吖,到网上去查一下才知道原来JAVA基础类中文件流是无法读取PDF文件,不过网上有开源 的包可以实现,不过也仅仅是限于读取而已,但是否能够写入压缩文件流又是另一问题。于是选择放弃压缩的方式,直接生成发包形式的文件夹,然后再手工压缩, 这样子也很简便,而且也方便于检查里面的文件,其实也很是不错。

  对文件的处理逻辑很是简单,可代码我写得一塌糊涂,像林MM所说的,就像是一坨shi,明天回公司再把代码贴出来,里面很多代码都是用于对文件的操作,有一点点算法的思想在里面,路过人的别忘了一定要拍砖哈!写个小东西都让我很是折磨。。。o(╯□╰)o


JAVA 写道
import java.io.BufferedInputStream;
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("========================================================");
}
}
}
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值