我有一个类需要写入文件以与一些传统的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) } }
小智.. 13
你试过这个:
def uuid = java.util.UUID.randomUUID.toString
请参阅UUID javadoc,以及UUID的唯一性如何?讨论独特性保证.
给文件一个唯一的名称是个好主意
由于你想要的只是一个文件,而不是id,最好的解决方案是创建一个具有唯一名称的文件,而不是具有唯一id的类.
你可以使用File.createTempFile
:
val uniqFile = File.createTempFile("myFile", ".txt", "/home/user/my_dir")
Vladimir Matveev 提到 Java 7及更高版本中有一个更好的解决方案 - Paths.createTempFile:
val uniqPath = Paths.createTempFile(Paths.get("/home/user/my_dir"), "myFile", ".txt"),
你试过这个:
def uuid = java.util.UUID.randomUUID.toString
请参阅UUID javadoc,以及UUID的唯一性如何?讨论独特性保证.