import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
public class CopyOfTakeFilePathAndName2 {
//处理101_ObjectCategories 将其中的文件夹里的文件全部搞出来,以子文件夹图片名命名
public static void main(String[] args) throws FileNotFoundException{
// This is the path where the file's name you want to take.
String path = "D:\\101_ObjectCategories";
String path2 = "D:\\COPY101_ObjectCategories";
File file = new File(path);
File[] array = file.listFiles();
for(int i =0;i< array.length;i++) {
try {
copyDirectiory(array[i].getPath(),path2);
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} //得到根目录下的文件路径
}
}
public static void copyFile(File sourceFile, File targetFile)
throws IOException {
// 新建文件输入流并对它进行缓冲
FileInputStream input = new FileInputStream(sourceFile);
BufferedInputStream inBuff = new BufferedInputStream(input);
// 新建文件输出流并对它进行缓冲
FileOutputStream output = new FileOutputStream(targetFile);
BufferedOutputStream outBuff = new BufferedOutputStream(output);
// 缓冲数组
byte[] b = new byte[1024 * 5];
int len;
while ((len = inBuff.read(b)) != -1) {
outBuff.write(b, 0, len);
}
// 刷新此缓冲的输出流
outBuff.flush();
// 关闭流
inBuff.close();
outBuff.close();
output.close();
input.close();
}
// 复制文件夹
public static void copyDirectiory(String sourceDir, String targetDir)
throws IOException {
// 新建目标目录
// (new File(targetDir)).mkdirs();
// 获取源文件夹当前下的文件或目录
File[] file = (new File(sourceDir)).listFiles();
String s3 = sourceDir.toString();
System.out.println(s3.substring(24,s3.length())); // 打印出来
for (int i = 0; i < file.length; i++) {
File sourceFile = file[i];
// 目标文件
if (file[i].isFile()) {
String s2 =file[i].getName();
File targetFile = new File(targetDir + "\\" +s3.substring(24,s3.length())+ s2.substring(5,s2.length()));
copyFile(sourceFile, targetFile);
// if (file[i].isDirectory()) {
// // 准备复制的源文件夹
// String dir1 = sourceDir + File.separator + file[i].getName();
// // 准备复制的目标文件夹
// String dir2 = targetDir + File.separator + file[i].getName();
// copyDirectiory(dir1, dir2);
// }
}
}
}
}
把上述分类好的结果处理 拷贝到指定位置以类命名的文件夹。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
//拷贝路径;实现对文件夹内图片以前6个字符开头的命名成新文件夹
//对catch 101类图像 分类成文件夹形式:想法是基于每一类图像中都有001.jpg字符串,然后找到它,截取完整路径中图片名部分,来命名文件夹,再根据包含这个类名来拷贝进去
public class CopyPath101 {
public static void main(String[] args) throws FileNotFoundException {
// This is the path where the file's name you want to take.
String Path = "D:\\COPY101_ObjectCategories";
File[] file = (new File(Path)).listFiles();
for (int i = 0; i < file.length; i++) {
String s = file[i].toString();
if (s.contains("0001.jpg")) {
String s1 = s.substring(28, s.length() - 9);// 截取完整路径中图片名部分
System.out.println(s1);
File target = new File("D:\\COPY101_ObjectCategories_clssify\\" + s1);
target.mkdirs();
try {
copyDirectiory(Path, target.getPath());
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
}
// 拷贝文件到文件
public static void copyFile(File sourceFile, File targetFile)
throws IOException {
// 新建文件输入流并对它进行缓冲
FileInputStream input = new FileInputStream(sourceFile);
BufferedInputStream inBuff = new BufferedInputStream(input);
// 新建文件输出流并对它进行缓冲
FileOutputStream output = new FileOutputStream(targetFile);
BufferedOutputStream outBuff = new BufferedOutputStream(output);
// 缓冲数组
byte[] b = new byte[1024 * 5];
int len;
while ((len = inBuff.read(b)) != -1) {
outBuff.write(b, 0, len);
}
// 刷新此缓冲的输出流
outBuff.flush();
// 关闭流
inBuff.close();
outBuff.close();
output.close();
input.close();
}
// 复制文件夹
public static void copyDirectiory(String sourceDir, String targetDir)
throws IOException {
// 新建目标目录
// (new File(targetDir)).mkdirs();
// 获取源文件夹当前下的文件或目录
File[] file = (new File(sourceDir)).listFiles();
String s2 = targetDir.toString();
String s3 = s2.substring(36, s2.length());
System.out.println(s3); // 打印出来
for (int i = 0; i < file.length; i++) {
// if (file[i].isFile()) {
// 源文件
File sourceFile = file[i];
// 目标文件
if ((file[i].toString()).contains(s3)) {
// 查看有没有包含targetDir中的后面那个文件夹的目录名称
File targetFile = new File(targetDir + "\\" + file[i].getName());
// System.out.println(targetDir+"\\"+file[i].getName());
targetFile.createNewFile();// 没有一定要创建一个
copyFile(sourceFile, targetFile);
}
}
}
}
处理得到所有类(文件夹名)的txt,txt保存都是图片名
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
public class TakeFilePathAndName {
//得到每一个文件夹内的子文件夹,并以子文件夹命名的
public static void main(String[] args) throws FileNotFoundException{
// This is the path where the file's name you want to take.
String path = "D:\\COPY101_ObjectCategories_clssify";
File file = new File(path);
File[] array = file.listFiles();
String s = null;
for(int i =0;i< array.length;i++) {
try {
s = "D:\\COPY101_ObjectCategories_clssify_txt\\"+array[i].getName()+".txt";
File file1 = new File(s);
file1.createNewFile();
System.out.println(s);
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
getFile(array[i].getPath(),s); //得到根目录下的文件路径
}
}
private static void getFile(String path,String s) {
// get file list where the path has
// get the folder list
File file1 = new File(path);
File[] array = file1.listFiles();
try {
FileWriter output = new FileWriter(s);
for(int i=0;i<array.length;i++){
if(array[i].isFile()) {
// System.out.println(array[i].getName());
output.append(array[i].getName()+":");//添加进去文件(图片)名字
}
}
output.close();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}