こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

一意の文字列を取得したい

同時に同じファイル名のファイルをアップロードしたときに、一意の文字列を付けて保存をして重複しないように保存をしたいです。
数値でも文字でもいいのですが、Javaで一意の文字列を取得する方法ってありますか?
宜しくお願いします。

投稿日時 - 2005-07-20 00:29:43

QNo.1525115

すぐに回答ほしいです

質問者が選んだベストアンサー

色々方法はあるかと思いますが、
java.io.FileのFileクラスのメソッド
createTempFile
を使うのが簡単なのではないかと思います。
createTempFile(ファイル名+"-",拡張子);
などとして、できたファイル名を使います。
作ったテンポラリファイルは、単に名前を作成するだけなので、
getNameしたらすぐ、削除します。

投稿日時 - 2005-07-20 03:00:18

お礼

ご回答ありがとうございます。
こんなメソッドがあったんですねー!
早速、使わせていただきます。

投稿日時 - 2005-07-20 23:16:22

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

No.1さんの回答ですが、createTempFileで既存ファイル名をチェックしていても
> getNameしたらすぐ、削除します。
では無意味ですよ。
ファイル名の分かりやすさを考える必要がなければcreateTempFileでファイルを作っても構いませんけど、名前を取ってすぐにファイル削除していては次に実行したときに同一のファイル名を作っていないことを保証することはできません。
一意性を保証するには対象範囲での重複チェックが必要です。質問の目的ならファイルの存在自体が一意性を保証するので、作成したファイルは消さずにそのまま使うべきです。

投稿日時 - 2005-07-20 16:52:14

お礼

ご回答ありがとうございます。
>質問の目的ならファイルの存在自体が一意性を保証するので、作成したファイルは消さずにそのまま使うべきです。
その通りですね。
助かりました!
ありがとうございます。

投稿日時 - 2005-07-20 23:31:38

ANo.5

#4さん
申し訳ありませんでした。
確かに
checkAndCreateメソッド(privateメソッド)
でチェックしてますね。

間違った回答をして申し訳ありませんでした。
気をつけます。

投稿日時 - 2005-07-20 15:29:06

お礼

ご回答ありがとうございます。
このメソッドに対する理解度があがりました!
ありがとうございます。

投稿日時 - 2005-07-20 23:19:11

ANo.4

#2>
java1.5のソースしか見てませんが、
ソースを見てみると、確かに、nextIntを使っていますが、
同時に、既に同じファイル名が存在しないかどうかのチェックもされています。

投稿日時 - 2005-07-20 13:59:54

ANo.3

一意という場合、どの範囲でというのが重要です。
この場合は保存するフォルダ内で一意で良いでしょうから、FileクラスのcreateNewFileでファイルを作成してしまうのが簡単だと思います。
最初はアップロードするファイル名を使います。作成に失敗したら既に同名のファイルが存在するのでアンダスコアと数字を付けるなど修飾して別の名前を作って作成します。後はファイル作成に成功するまで数字をインクリメントして繰り返します。

投稿日時 - 2005-07-20 11:08:02

ANo.2

※j2sdk1.4.2_07です。
気にしなくてもいいと思いますが、
createTempFileではRandomクラスのnextIntを使ってます。

nextIntの説明に
--------------------------------------------------
nextInt の一般規約では、1 つの int 型の値が擬似乱数として生成されて返されます。2の32乗 の可能なすべての int 値が (ほぼ) 均等な確率で生成されます。
--------------------------------------------------
とありますので、必ずしも一意ということではなく、
あくまでも
int 値が (ほぼ) 均等な確率で生成される。
ということなので、同じファイル名になる可能性があります。

その名前を採用する前に、Fileクラスのexistsメソッドで存在確認を行うか、
もしくはファイル名にタイムスタンプを使用するなどした方が良いかもしれません。

投稿日時 - 2005-07-20 10:38:41

あなたにオススメの質問