V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ruiyinjinqu
V2EX  ›  Java

[新人求助]文件在可以进行重复上传,怎么让后面上传的文件替换前面上传的同名文件?

  •  
  •   ruiyinjinqu · 2019-10-04 14:16:26 +08:00 · 3720 次点击
    这是一个创建于 1659 天前的主题,其中的信息可能已经有所发展或是发生改变。

    上传文件的名称和格式都已经在数据库表中规定好了,我只用在根据数据库表读取相关信息,然后限制上传文件的类型就好了,但是要求可以重复上传,并且第二次上传的文件能够替换上一次上传的文件。 但是在我进行重复上传的时候不知道为第二次文件上传内容能够覆盖前一次的,但是上传的文件会占的内存会越来越大。下面是我的部分代码:
    String saveFilaName = getSaveFileName(fileName, request);
    String filePath = getSaveFilePath(fileName, request);
    File file = new File(filePath,saveFilaName);
    // if (file.exists()){
    // file.delete();
    // }
    file.deleteOnExit();
    BufferedOutputStream bout = null;
    FileOutputStream fout = null;
    int blean = fileBytes.length;
    try{
    file.createNewFile();
    fout = new FileOutputStream(file,true);
    bout = new BufferedOutputStream(fout);
    if (blean>1) {//修复上传 docx、xlsx 文件损坏问题
    byte[] tmps = new byte[2];
    tmps[0]=fileBytes[blean-2];
    tmps[1]=fileBytes[blean-1];
    if (Arrays.equals(tmps, HttpConstances.CRLF) ) {
    bout.write(fileBytes,0,blean-2);
    }else{
    bout.write(fileBytes,0,blean);
    }
    }else{
    bout.write(fileBytes,0,blean);
    }
    bout.flush();
    }catch (Exception e) {
    throw e;
    }finally{
    if(fout!=null){
    fout.close();
    }
    if(bout!=null){
    bout.close();
    }
    }
    在上面的注释掉的代码,本来是可以删除文件的,但是如果输出流有问题,会导致现在的没法写进去,又将以前删除了, 所以考虑有没有更好的替换方法,或者思路。初次提问, 有啥不太清楚的地方大家多多原谅,麻烦了

    3 条回复    2019-10-05 15:39:28 +08:00
    luassuns
        1
    luassuns  
       2019-10-04 14:47:56 +08:00 via iPhone   ❤️ 1
    可以参考各种软件常用的 .swap .bak ?
    gaobh
        2
    gaobh  
       2019-10-04 14:56:51 +08:00   ❤️ 2
    一般都是两个文件夹,一个是上传了还没有读取,一个是读取了备份文件夹,读取完就移到备份文件夹加.bak ,新来的文件覆盖上一个,备份文件为-2.bak
    ruiyinjinqu
        3
    ruiyinjinqu  
    OP
       2019-10-05 15:39:28 +08:00
    谢谢大家,我想的是在判断同名文件是否存在,存在的话修改文件名,然后在后面新文件上传成功后删除改名的文件,要是新文件上传失败则在 catch 里将文件名改回来就行了 :)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2960 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 03:07 · PVG 11:07 · LAX 20:07 · JFK 23:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.