如何用JAVA实现根据文件后缀名分类文件,并且将文件复制到不同的文件夹

急啊,求大神门帮帮忙

处理的代码逻辑如下:

public static void main(String args[]) {
String saveToFileDir = "F:\\整理后的文件存放目录";
File file = new File("F:\\所需整理的文件目录");
processFileFenLei(saveToFileDir, file);
}

private static void processFileFenLei(String saveToFileDir, File file) {
if (file.getName().startsWith(".")) {
return;
}
System.out.println("当前处理位置===>" + file.getAbsolutePath());
if (file.isFile()) {
processCopyFile(saveToFileDir, file);
} else {
File[] subFiles = file.listFiles();
for (File subFile : subFiles) {
processFileFenLei(saveToFileDir, subFile);
}
}
}

private static void processCopyFile(String saveToFileDir, File file) {
String extFileName = FileCreateUtil.getFileExtension(file);
String wholeDir = saveToFileDir + "\\" + extFileName;
File fileDir = new File(wholeDir);
if (!fileDir.exists()) {
fileDir.mkdirs();
}
File saveToFile = new File(wholeDir + "\\" + file.getName());
FileCreateUtil.saveFileToFile(file, saveToFile);
}

以上代码中所用到的文件操作工具类:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.sql.Blob;
import java.sql.SQLException;

/**
 * @作者 王建明
 * @创建日期 Feb 4, 2010
 * @创建时间 9:56:15 AM
 * @版本号 V 1.0
 */
public class FileCreateUtil {
private static final String CONTENT_TYPE_IMAGE = "image/jpeg";

/**
 * @说明 将二进制字节流保存为文件
 * @param byteArry二进制流
 * @param file要保存的文件
 * @throws SQLException
 * @throws IOException
 */
public static void saveByteArry2File(byte[] byteArry, File file)
throws SQLException, IOException {
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(file));
bos.write(byteArry);
bos.close();
}

/**
 * @说明 将文件转换为二进制字节流
 * @param file要转换的文件
 * @return
 * @throws SQLException
 * @throws IOException
 */
public static byte[] changeFile2Bytes(File file) throws SQLException,
IOException {
long len = file.length();
byte[] bytes = new byte[(int) len];
FileInputStream inputStream = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new BufferedInputStream(
inputStream);
int r = bufferedInputStream.read(bytes);
if (r != len) {
throw new IOException("File read error");
}
inputStream.close();
bufferedInputStream.close();
return bytes;
}

/**
 * @说明 将Blob类类型的文件转换成二进制字节流
 * @param pic
 * @return
 * @throws SQLException
 * @throws IOException
 */
public static byte[] changeBlob2Bytes(Blob pic) throws SQLException,
IOException {
byte[] bytes = pic.getBytes(1, (int) pic.length());

return bytes;
}

/**
 * @说明 将Blob类类型的数据保存为本地文件
 * @param blob
 * @param file
 * @throws SQLException
 * @throws IOException
 */
public static void saveBlob2File(Blob blob, File file) throws SQLException,
IOException {
InputStream is = blob.getBinaryStream();
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(file));
int b = -1;
while ((b = is.read()) != -1) {
bos.write(b);
}
bos.close();
is.close();
}

/**
 * @说明 将一个文件拷贝到另一个文件中
 * @param oldFile源文件
 * @param newFile目标文件
 */
public static void saveFileToFile(File oldFile, File newFile) {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(oldFile); // 建立文件输入流

fos = new FileOutputStream(newFile);

int r;
while ((r = fis.read()) != -1) {
fos.write((byte) r);
}
} catch (FileNotFoundException ex) {
System.out.println("Source File not found");
} catch (IOException ex) {
System.out.println(ex.getMessage());
} finally {
try {
if (fis != null)
fis.close();
if (fos != null)
fos.close();
} catch (IOException ex) {
System.out.println(ex);
}
}
}

/**
 * @说明 获取文本形式文件的内容
 * @param file要读取的文件
 * @return
 */
public static String getTxtFileContent(File file) {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));
String line = null;
StringBuilder sb = new StringBuilder((int) file.length());
while ((line = br.readLine()) != null) {
sb.append(line);
sb.append("\n");
}
return sb.toString();
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("File not found");
} catch (IOException e) {
e.printStackTrace();
System.out.println("Read file error");
} finally {
try {
if (br != null)
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return "";
}

/**
 * @说明 把一个文件转化为字节
 * @param file
 * @return byte[]
 * @throws Exception
 */
public static byte[] getByteFromFile(File file) throws Exception {
byte[] bytes = null;
if (file != null) {
InputStream is = new FileInputStream(file);
int length = (int) file.length();
if (length > Integer.MAX_VALUE) // 当文件的长度超过了int的最大值
{
System.out.println("this file is max ");
return null;
}
bytes = new byte[length];
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) {
offset += numRead;
}
// 如果得到的字节长度和file实际的长度不一致就可能出错了
if (offset < bytes.length) {
System.out.println("file length is error");
return null;
}
is.close();
}
return bytes;
}

/**
 * @说明 将指定文本内容写入到指定文件中(原文件将被覆盖!)
 * @param content要写入的内容
 * @param file写到的文件
 */
public static void writeContentIntoFile(String content, File file) {
try {
if (file.exists()) {
file.delete();
}
file.createNewFile();

FileWriter fw = new FileWriter(file, true);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(content);
bw.close();
fw.close();
} catch (IOException e) {
System.out.println("Write file error");
e.printStackTrace();
}
}

/**
 * @param file
 * @param encode
 * @return
 * @throws Exception
 *             T:2012-03-01 11:12:51 A:王建明 X:问题ID—— R:备注——读取文件时设置txt文件的编码方式
 */
public static String readFileContent(File file, String encode)
throws Exception {
StringBuilder sb = new StringBuilder();
if (file.isFile() && file.exists()) {
InputStreamReader insReader = new InputStreamReader(
new FileInputStream(file), encode);

BufferedReader bufReader = new BufferedReader(insReader);

String line = new String();
while ((line = bufReader.readLine()) != null) {
// System.out.println(line);
sb.append(line + "\n");
}
bufReader.close();
insReader.close();
}
return sb.toString();
}

/**
 * @param file
 * @return T:2012-03-01 11:12:25 A:王建明 X:问题ID—— R:备注——获取txt文件的编码格式
 */
public static String getTxtEncode(File file) {
String code = "";
try {
InputStream inputStream = new FileInputStream(file);
byte[] head = new byte[3];
inputStream.read(head);

code = "gb2312";
if (head[0] == -1 && head[1] == -2)
code = "UTF-16";
if (head[0] == -2 && head[1] == -1)
code = "Unicode";
if ((head[0] == -17 && head[1] == -69 && head[2] == -65))
code = "UTF-8";
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return code;
}

/**
 * @说明 获取文件后缀名
 * @param file
 * @return
 */
public static String getFileExtension(File file) {
if (file != null && file.isFile()) {
String filename = file.getName();
int i = filename.lastIndexOf(".");
if (i > 0 && i < filename.length() - 1) {
return filename.substring(i + 1).toLowerCase();
}
}
return "";
}

/**
 * @说明 删除文件或文件夹
 * @param file
 * @作者 王建明
 * @创建日期 2012-5-26
 * @创建时间 上午09:36:58
 * @描述 ——
 */
public static void deleteFile(File file) {
if (file.exists()) { // 判断文件是否存在
if (file.isFile()) { // 判断是否是文件
file.delete(); // delete()方法 你应该知道 是删除的意思;
} else if (file.isDirectory()) { // 否则如果它是一个目录
File files[] = file.listFiles(); // 声明目录下所有的文件 files[];
for (int i = 0; i < files.length; i++) { // 遍历目录下所有的文件
deleteFile(files[i]); // 把每个文件 用这个方法进行迭代
}
}
file.delete();
} else {
System.out.println("所删除的文件不存在!" + '\n');
}
}

/**
 * @说明 创建文件夹,如果不存在的话
 * @param dirPath
 * @作者 王建明
 * @创建日期 2012-5-26
 * @创建时间 上午09:49:12
 * @描述 ——
 */
public static void createMirs(String dirPath) {
File dirPathFile = new File(dirPath);
if (!dirPathFile.exists())
dirPathFile.mkdirs();
}
}

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-05-18
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.swing.JFileChooser;

public class FileDemo {
    public static void main(String[] args) {
        File sourcePath = getSourcePath();
        File outputPath = getOutputPath();
        handlePath(sourcePath, outputPath);
    }

    private static void handlePath(File sourcePath, File outputPath) {
        if (sourcePath == null || outputPath == null)
            return;
        for (File file : sourcePath.listFiles()) {
            if (file.isDirectory()) {
                handlePath(file, outputPath);
            } else {
                String fileName = file.getName();
                if (fileName.contains(".")) {
                    String suffix = fileName.substring(fileName.lastIndexOf('.') + 1);
                    copy(file, new File(outputPath, suffix));
                } else {
                    copy(file, new File(outputPath, "nosuffix"));
                }
            }
        }
    }

    private static void copy(File sourceFile, File targetDir) {
        System.out.println("copying " + sourceFile);
        if (!targetDir.exists()) {
            targetDir.mkdir();
        }
        try {
            FileInputStream fis = new FileInputStream(sourceFile);
            FileOutputStream fos = new FileOutputStream(new File(targetDir, sourceFile.getName()));
            byte[] buf = new byte[102400];
            int available = 0;
            while ((available = fis.available()) > buf.length) {
                fis.read(buf);
                fos.write(buf);
            }
            fis.read(buf, 0, available);
            fos.write(buf, 0, available);
            fis.close();
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private static File getSourcePath() {
        JFileChooser chooser = new JFileChooser();
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
            return chooser.getSelectedFile();
        }
        return null;
    }

    private static File getOutputPath() {
        JFileChooser chooser = new JFileChooser();
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        if (chooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
            return chooser.getSelectedFile();
        }
        return null;
    }
}

先选择来源文件夹,然后选择输出文件夹。

然后等待即可。程序会遍历子目录。

追问

能排得好看点么

能排得好看点么

追答

什么意思,什么叫排的好看点?

最好快点问,马上吃中午饭了。

---------------------

我发现你是用手机提问的,你用电脑看就好看了。

代码我都正确缩进了。

本回答被提问者采纳

如何用JAVA实现根据文件后缀名分类文件,并且将文件复制到不同的文件...
File files[] = file.listFiles(); \/\/ 声明目录下所有的文件 files[]; for (int i = 0; i < files.length; i++) { \/\/ 遍历目录下所有的文件 deleteFile(files[i]); \/\/ 把每个文件 用这个方法进行迭代 } } file.delete(); } else { System.out.println("所删除的文件不存在!" + '\\n'); ...

java把后缀名为txt的文件移动到另一个文件夹
可以的。java把后缀名为txt的文件移动到另一个文件夹是可以的,只需将startPath文件夹下 ,文件名在在table.txt 中的文件移动到endPath文件夹下, table.txt中包含需要移动的文件名即可。

文件夹F:\\\\txt中有很多txt文件,用java随机读取一个txt文件,然后将之...
public static void fun(File file[],int i){ if(file[i].exists()){\/\/如果文件存在 String name = file[i].getName();\/\/获取文件名 if(file[i].isFile()&&name.endsWith(".txt")){ \/\/如果是文件并且后缀名为.txt File dest = new File("D:\\\\txt\\\\"+file[i].getName());fi...

java查找出某个文件目录下的所有.java文件复制到其他目录下,并复制到其...
如果你待处理的文件夹不分级就是这样了,多级的话要加递归public static void main(String[] args) throws IOException { String pathIn=" ";\/\/某个文件目录 String pathOut=" ";\/\/要复制到的地方 File fs[] =new File(pathIn).listFiles(); int size = fs.length; for (...

求助java高手啊:::JAVA如何在一文件夹内根据后缀名搜索
实现一个接口就可以了 import java.io.File;import java.io.FileFilter;public class Test1 { public static void main(String[] args) { File file = new File("D:\\\\Applk\\\\AndroidAppBook\\\\");File[] ary = file.listFiles(new TxtFilter());for (File fl : ary) { System.out.println...

用java写一段程序扫描文件夹下所有后缀为.txt的文件代码
import java.io.FilenameFilter;public class FileNameSelector implements FilenameFilter\/\/FilenameFilter接口实现文件名过滤器功能;{ String extension = ".";public FileNameSelector(String fileExtensionNoDot){ extension += fileExtensionNoDot;} Override public boolean accept(File dir, String name...

java如何自动生成文件清单
1、首先我们打开电脑,在你需要生成文件名清单的文件夹点击右键,选择新建文本文档。2、打开创建的txt文件,输入:dir *.mp3>mp3.txt 之后保存。mp3.txt为保存文件清单的输出文件,输出位置为当前文件夹。3、进入文件夹选项选择隐藏已知文件类型的扩展名,去掉勾选。4、将创建的txt文件后缀名修改为bat...

Java多种文件复制方式以及效率比较
1. listFiles():通过srcFile的listFiles()获取所有的子文件与子文件夹,然后判断是否是目录。2. list():与listFiles()类似,不过是String[],也是先判断目录,创建目录,不是目录直接复制。3. org.codehaus.plexus.util.FileUtils.getFiles:这是使用了别人的工具类进行遍历。4. Commons.io:使用org....

java如何按照文件主题进行文件的分类排序。希望给些代码和思想。谢谢...
也就是按照文件名进行排序.先用流获取文件名,然后自己定义个排序方法就行了.比如有个文件的后缀名是.mp3有个文件后缀名是.jpg.那你就可以定义一个音乐类一个图片类,然后截取后缀名来比对.如果后缀名是.mp3 .wav等就放进音乐类.

指定了文件夹,输出文件夹下面文件的后缀名有那些,怎么做?
import java.io.File;import java.io.IOException;public class A02_FilterDemo {public static void main(String[] args) throws IOException { \/\/指定的文件夹的路径File file = new File("E:\/\/mp4");String[] fileList = file.list();for (String string : fileList) { \/\/根据.来切...

相似回答