進数表現でuniqueなファイル名を設定したい.java
まだ自分でもよくわかってない
実行中に生成したファイルに名前を付けたいというとき、
例えば
aaa.write(sometype, new java.io.File("filename"));
とかやる。
で。
一度にたくさんファイルを作ったり、
一度にいくつファイルを作るかわからないとき、
例えば、10個はファイルを作りたいとき、
for(int i=0; i<10; i++){
aaa.write(some..., new java.io.File(i + "filename"));
}
とかやる。
で。
やりたかったのは、
「ファイルの内容が一意にとれる名前を付けたい」ということ。
具体的には、
「いくつかの数字の並びを一つにまとめたファイル名で生成したい」
で。
今回は、いくつかの数字が0~300あたりの値なので、桁数がばらつく。
やりたいことは、
- 桁がない部分には0を入れる
- 3桁の数字がたくさん並んで一つにつなげると長いので短くする
例えば、
1, 50, 66, 121, 4, 55, 24, ... ←こんな ArrayList<Integer> bbb を使うとして
これを一つにまとめると
1506612145524...
これでは区切りが分からないので
001050066121004055024...
これだとファイル名として長すぎるので
01324279043718...
みたいにしたい。
で、
Integer hex;
for(Integer i = 0; bbb.get(i) != null; i++){
hex += String.format("%02x", Integer.toHexString(bbb.get(i));
}
aaa.write(some..., new java.io.File(hex + "filename"));
とかやるとダメだった。
String.format() がうまいこといかないのと、
ArrayListの中身を一度別の変数に持たせないと具合が悪いそうで。
どうにかなったら続きを書きます。
今日はそろそろ帰る。
2017-06-15-19-33
以下、参考にしました。
---
加筆@2017/06/16
ArrayList の中身を一度受ける部分はどうにかなった。
でも、String.format() がうまいこといかない。
で、
これが String.format() の問題だけじゃないっぽいことは分かった。
hex += String.format("%02x", Integer.toHexString(bbb.get(i));
を、forループしないで
{
Integer sss = bbb.get(n);
String hex = toHex(sss);
}
~~~
private static String ToHex(Integer a) { // Integerを16進数2桁にして返す
String s = Integer.toHexString(a);
if(s.length() == 1) s = "0" + s;
return s;
}
とかやったらうまいこといった。
でも、これをforループ内でやろうとするとダメだった。
ここで、もしや条件式が悪いのではと思い立つ。
で、
Integer sss;
String hex;
for(Integer i = 0; bbb.get(i) != null; i++){
for(int i = 0; i < bbb.size(); i++){
sss = bbb.get(n);
hex += ToHex(sss);
}
aaa.write(some..., new java.io.File(hex + "filename"));
ってやったらうまいこといった。
なんでうまいこといったのかはおいおい考える。
以下参考にしました。