您的位置:首页 > 编程语言 > Java开发

Java IO 创建文件解决文件名重复问题

2018-03-17 10:22 543 查看
之前在做上传的时候,文件命名都是按照时间毫秒数来命名的,如 2017120110344155.jpg 这种的

其实这种虽然能解决问题,但是我个人不是很喜欢。我更希望是如果文件名不存在不修改文件名,如果存在在文件名后面加数字,1,2,3这种的。像这样

 

代码演示

下面通过一个拷贝文件的例子完成这个想法package practice.IO;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author 言曌
 * @date 2017/12/2 上午10:59
 */

public class Demo {

    /**
     * 将 /Users/liuyanzhao/Desktop/spring.jpeg 文件
     * 拷贝到
     * /Users/liuyanzhao/Desktop/io/中
     * 需要避免文件名重复覆盖的情况
     */
    public static void main(String args[]) throws IOException {

        //源文件
        File sourceFile = new File("/Users/liuyanzhao/Desktop/spring.jpeg");

        //文件的完整名称,如spring.jpeg
        String filename = sourceFile.getName();
        //文件名,如spring
        String name = filename.substring(0,filename.indexOf("."));
        //文件后缀,如.jpeg
        String suffix = filename.substring(filename.lastIndexOf("."));

        //目标文件
        File descFile = new File("/Users/liuyanzhao/Desktop/io"+File.separator+filename);

        int i = 1;
        //若文件存在重命名
        while(descFile.exists()) {
            String newFilename = name+"("+i+")"+suffix;
            String parentPath = descFile.getParent();
            descFile = new File(parentPath+ File.separator+newFilename);
            i++;
        }

        descFile.createNewFile();  //新建文件
        FileInputStream fin = new FileInputStream(sourceFile);
        FileOutputStream fout = new FileOutputStream(descFile);
        byte[] data = new byte[512];
        int rs = -1;
        while((rs=fin.read(data))>0) {
            fout.write(data,0,rs);
        }
        fout.close();
        fin.close();
    }

}
 最终效果是如上图如果文件存在,重命名加(1),如果还存在加(2),... 本文地址:https://liuyanzhao.com/6861.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐