按顺序命名传入文件的最简单方法

时间:2016-01-02 04:19:09

标签: java

我正在进行项目,其中我从客户端接收图像数量,并希望按名称将其存储在服务器中,如0.jpg,1.jpg,2.jpg .....

最有效的方法是什么?

我尝试使用字符串格式但它不起作用。

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:1)

您可以使用计数器自动增加文件名。

while (true)
{
    int counter = 0;
    String automaticFilename = String.valueOf(counter);

    boolean exist = new File("path/to/".concat(automaticFilename).concat(".jpg")).isFile();

    if (exist)
    {
        counter++;
        continue;
    } else
    {
        // Create file etc.
    }

}

答案 1 :(得分:1)

您可以在文件名中包含多个部分,而不是使用数字命名文件。通过查看名称来了解文件的内容会很有用。它可以很容易地不使用数据库。

例如,以下是为文件生成唯一名称的代码,无需数据库干预。

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger;

public class TestCode {
    static final AtomicInteger sequence = new AtomicInteger();
    static final SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-DD:mm:ss:SSS");

    public static void main(String[] args) {
        String name = getUniqueName();
        System.out.println(name);
    }
    private static String getUniqueName() {
        String dateStr = sdf.format(new Date());
        String name = dateStr + "_" + sequence.incrementAndGet() + "_" + UUID.randomUUID() + ".jpg";
        return name;
    }
}

<强>输出

2016-01-01:51:27:281_1_de653366-6847-47b6-9df0-13bb359c2459.jpg

此名称告诉我们文件保存的日期和时间,并使用UUID保持名称唯一,AtomiInteger(线程安全)以保持在同一时刻创建的文件具有不同的顺序名称

即使您的AtomicIntege在服务器重启时重置为零,日期和时间也会不同,文件排序仍然可以很好地定义。

答案 2 :(得分:0)

一种简单的方法是将当前索引存储在持久存储(例如DB)中。当您从客户端获取新文件

  • 获取当前索引,将其递增1并将其存储回来
  • 以名称存储文件作为索引。

确保持久存储支持来自多个线程的并发访问。

答案 3 :(得分:0)

也许这样的事情(不是真正的java):

int fileNumber = 0
for(int i = 0; i < images.size(); i++){
    FileOutputStream fos = new FileOutputStream(fileNumber + ".jpg");
    for byte : image.getBytes(){
        fos.write(byte);
    }
    fos.close();
    fileNumber++;
}

(图片是你的图片,我不确定是否有getBytes方法)