我正在进行项目,其中我从客户端接收图像数量,并希望按名称将其存储在服务器中,如0.jpg,1.jpg,2.jpg .....
最有效的方法是什么?
我尝试使用字符串格式但它不起作用。
任何帮助都将不胜感激。
答案 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)中。当您从客户端获取新文件
时确保持久存储支持来自多个线程的并发访问。
答案 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方法)