CopyFile.java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
/**
* 带文件夹复制所有文件
* @author yang
*
*/
public class CopyFile {
public static void copy(File[] fl, File file) {
if (!file.exists()) // 如果文件夹不存在
file.mkdir(); // 建立新的文件夹
for (int i = 0; i < fl.length; i++) {
if (fl[i].isFile()) { // 如果是文件类型就复制文件
try {
FileInputStream fis = new FileInputStream(fl[i]);
FileOutputStream out = new FileOutputStream(new File(
file.getPath() + File.separator + fl[i].getName())); //File.separator: windows是\,unix是/
//int count = fis.available();
byte[] data = new byte[1024];
if ((fis.read(data)) != -1) {
out.write(data); // 复制文件内容
}
out.close(); // 关闭输出流
fis.close(); // 关闭输入流
} catch (Exception e) {
e.printStackTrace();
}
}
if (fl[i].isDirectory()) { // 如果是文件夹类型
File des = new File(file.getPath() + File.separator
+ fl[i].getName());
des.mkdir(); // 在目标文件夹中创建相同的文件夹
copy(fl[i].listFiles(), des); // 递归调用方法本身
}
}
}
public static void main(String[] args) {
File sourFile = null, desFile = null;
String sourFolder = "C://Users//Apxar//Desktop//hello"; // 可以修改源文件夹路径
String desFolder = "C://Users//Apxar//Desktop"; // 可以修改目标文件夹路径
sourFile = new File(sourFolder);
if (!sourFile.isDirectory() || !sourFile.exists()) {
System.out.println("源文件夹不存在");
} else {
desFile = new File(desFolder);
desFile.mkdir();
copy(sourFile.listFiles(), desFile); // 调用copy()方法
System.out.println("文件夹复制成功!");
}
}
}
Demo1.java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Demo1 {
public static void main(String[] args) {
/**
* 1,先调用方法将txt文档里的内容全部读取到集合中
* 2,遍历集合,将每一个条目作为keyword调用以下方法 复制
*/
File folder = new File("E:/yang");// 默认目录
String keyword = "bb";
File[] result = FileUtils.searchFile(folder, keyword);// 调用方法获得文件数组
//File file = new File("E:/yang/aa/bb.py");
//copyFile(file);
for (File file : result) {
copyFile(file);
}
System.out.println("复制成功");
}
/**
* 根据文件路径复制文件
* 比如:F:/aa/cc/xx.txt复制到F:/aa1/cc/xx.txt
*/
public static void copyFile(File file){
String absolutePathString = file.getAbsolutePath();
int i = absolutePathString.lastIndexOf("\\");
String string = absolutePathString.substring(0, i);
string = string.replace("yang", "yang1");
File newDir = new File(string);
if(!newDir.exists()){
newDir.mkdirs();
}
try {
FileInputStream fis = new FileInputStream(file);
FileOutputStream out = new FileOutputStream(new File(
newDir ,file.getName())); //File.separator: windows是\,unix是/
//int count = fis.available();
byte[] data = new byte[1024];
if ((fis.read(data)) != -1) {
out.write(data); // 复制文件内容
}
out.close(); // 关闭输出流
fis.close(); // 关闭输入流
} catch (Exception e) {
e.printStackTrace();
}
}
}
FileUtils.java
import java.io.File;
import java.io.FileFilter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
//操作查找文件的类
public class FileUtils {
static int countFiles = 0;// 声明统计文件个数的变量
static int countFolders = 0;// 声明统计文件夹的变量
public static File[] searchFile(File folder, final String keyWord) {// 递归查找包含关键字的文件
File[] subFolders = folder.listFiles(new FileFilter() {// 运用内部匿名类获得文件
@Override
public boolean accept(File pathname) {// 实现FileFilter类的accept方法
if (pathname.isFile())// 如果是文件
countFiles++;
else
// 如果是目录
countFolders++;
if (pathname.isDirectory()
|| (pathname.isFile() && pathname.getName()
.toLowerCase()
.contains(keyWord.toLowerCase())))// 目录或文件包含关键字
return true;
return false;
}
});
List<File> result = new ArrayList<File>();// 声明一个集合
for (int i = 0; i < subFolders.length; i++) {// 循环显示文件夹或文件
if (subFolders[i].isFile()) {// 如果是文件则将文件添加到结果列表中
result.add(subFolders[i]);
} else {// 如果是文件夹,则递归调用本方法,然后把所有的文件加到结果列表中
File[] foldResult = searchFile(subFolders[i], keyWord);
for (int j = 0; j < foldResult.length; j++) {// 循环显示文件
result.add(foldResult[j]);// 文件保存到集合中
}
}
}
File files[] = new File[result.size()];// 声明文件数组,长度为集合的长度
result.toArray(files);// 集合数组化
return files;
}
public static void main(String[] args) {// java程序的主入口处
File folder = new File("E:/yang");// 默认目录
String keyword = "bb";
if (!folder.exists()) {// 如果文件夹不存在
System.out.println("目录不存在:" + folder.getAbsolutePath());
return;
}
File[] result = searchFile(folder, keyword);// 调用方法获得文件数组
System.out.println("在 " + folder + " 以及所有子文件时查找对象" + keyword);
System.out.println("查找了" + countFiles + " 个文件," + countFolders
+ " 个文件夹,共找到 " + result.length + " 个符合条件的文件:");
for (int i = 0; i < result.length; i++) {// 循环显示文件
File file = result[i];
System.out.println(file.getAbsolutePath() + " ");// 显示文件绝对路径
}
}
/**
* 传入一个file,在file的同级目录下,生成txt文件,写入传进来的String数据
* @param file
* @param string
*/
public static void createFile(File file ,String string){
String absolutePath = file.getAbsolutePath();
//采用截取的方式而不是替换的方式 避免在文件中出现xml字符
int i = absolutePath.lastIndexOf(".");
String s = absolutePath.substring(0, i);
s = s+".txt";
try {
OutputStream out = new FileOutputStream(new File(s));
out.write(string.getBytes());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Test1.java
import java.io.File;
public class Test1 {
/**
* @param args
*/
public static void main(String[] args) {
// String path = "aa.xml";
// String string = XmlUtils.parserXml(new File(path));
// System.out.println(string);
File file = new File("E:/yang1");
File[] xmlFiles = FileUtils.searchFile(file, ".xml");
for (File file2 : xmlFiles) {
System.out.println(file2.toString());
String string = XmlUtils.parserXml(file2);
FileUtils.createFile(file2, string);
}
}
}
XmlUtils.java
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/**
*
* @author hongliang.dinghl Dom4j 生成XML文档与解析XML文档
*/
public class XmlUtils {
public static void createXml(String fileName) {
Document document = DocumentHelper.createDocument();
Element employees = document.addElement("employees");
Element employee = employees.addElement("employee");
Element name = employee.addElement("name");
name.setText("ddvip");
Element sex = employee.addElement("sex");
sex.setText("m");
Element age = employee.addElement("age");
age.setText("29");
try {
Writer fileWriter = new FileWriter(fileName);
XMLWriter xmlWriter = new XMLWriter(fileWriter);
xmlWriter.write(document);
xmlWriter.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
public static void parserXml(String fileName) {
File inputXml = new File(fileName);
SAXReader saxReader = new SAXReader();
try {
Document document = saxReader.read(inputXml);
Element employees = document.getRootElement();
System.out.println(employees.toString());
for (Iterator i = employees.elementIterator(); i.hasNext();) {
Element employee = (Element) i.next();
for (Iterator j = employee.elementIterator(); j.hasNext();) {
Element node = (Element) j.next();
System.out.println(node.getName() + " = '" + node.getText()+"'");
}
}
} catch (DocumentException e) {
System.out.println(e.getMessage());
}
System.out.println("dom4j parserXml");
}
public static String parserXml(File fileName) {
SAXReader saxReader = new SAXReader();
StringBuilder stringBuilder = new StringBuilder();
try {
Document document = saxReader.read(fileName);
Element employees = document.getRootElement();
//System.out.println(employees.toString());
for (Iterator i = employees.elementIterator(); i.hasNext();) {
Element employee = (Element) i.next();
for (Iterator j = employee.elementIterator(); j.hasNext();) {
Element node = (Element) j.next();
//System.out.println(node.getName() + " = '" + node.getText()+"'");
stringBuilder.append(node.getName() + " = '" + node.getText()+"'");
stringBuilder.append("\n");
}
}
} catch (DocumentException e) {
System.out.println(e.getMessage());
}
//System.out.println("dom4j parserXml");
String result = stringBuilder.toString();
return result;
}
}
StringUtils.java
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
/**
*
* @author yang
*
*/
public class StringUtils {
/**
* InputStreamReader+BufferedReader读取字符串 , InputStreamReader类是从字节流到字符流的桥梁
* 按行读对于要处理的格式化数据是一种读取的好方式
* @param file
* @return
*/
public static String file2String(File file) {
int len = 0;
StringBuffer str = new StringBuffer("");
try {
FileInputStream is = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(is);
BufferedReader in = new BufferedReader(isr);
String line = null;
while ((line = in.readLine()) != null) {
if (len != 0) { // 处理换行符的问题
str.append("\r\n" + line);
}
else {
str.append(line);
}
len++;
}
in.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
return str.toString();
}
/**
* 传入一个文件file,在文件的开头写入传进来的String字符串
* @param file
* @param string
*/
public static void addStringInHead(File file ,String headContent){
String content = file2String(file);
content = headContent + content;
try {
OutputStream out = new FileOutputStream(file);
out.write(content.getBytes());
//out.write(content.getBytes(),);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Test1.java
import java.io.File;
public class Test1 {
/**
* @param args
*/
public static void main(String[] args) {
File file = new File("E:/aa");
File[] xmlFiles = FileUtils.searchFile(file, ".xml");
for (File f : xmlFiles) {
//通过替换拿到同名的py文件
File pyFile = new File(f.getAbsolutePath().replace(".xml", ".py"));
System.out.println(pyFile.toString());
//解析xml文件得到所需要的键值对
String headContent = XmlUtils.parserXml(f);
//将键值对信息添加到同名py文件的开头
StringUtils.addStringInHead(pyFile, headContent);
System.out.println("转换成功");
}
}
}