我有一个类需要写入文件以与一些传统的C ++应用程序进行交互。 由于它将以并发方式多次实例化, 给文件一个唯一的名称是个好主意。
我可以使用System.currentTimemili或hashcode,但是存在冲突的可能性。
另一种解决方案是在伴随对象中放置var
字段。
作为一个例子,下面的代码显示了一个带有最后一个解决方案的类,但我不确定它是最好的方法(至少它似乎是线程安全的):
case class Test(id:Int, data: Seq[Double]) {
//several methods writing files...
}
object Test {
var counter = 0
def new_Test(data: Seq[Double]) = {
counter += 1
new Test(counter, data)
}
}
答案 0 :(得分:10)
你试过这个:
def uuid = java.util.UUID.randomUUID.toString
有关唯一性保证的讨论,请参阅UUID javadoc和How unique is UUID?。
答案 1 :(得分:6)
为文件提供唯一名称
是个好主意
由于你想要的只是一个文件,而不是id,最好的解决方案是创建一个具有唯一名称的文件,而不是具有唯一id的类。
您可以使用File.createTempFile
:
val uniqFile = File.createTempFile("myFile", ".txt", "/home/user/my_dir")
Vladimir Matveev mentioned在Java 7及更高版本中有更好的解决方案 - Paths.createTempFile:
val uniqPath = Paths.createTempFile(Paths.get("/home/user/my_dir"), "myFile", ".txt"),