我正在创建一个文件,当我创建该文件时,我会检查它是否已经存在。如果它已经存在,我想用相同的名称创建它,但在它之后使用(1)。我能够做到这一点,这是代码:
File apkReceived = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/"+receivedApkName + ".apk");
if(apkReceived.exists()){
apkReceived=new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/"+receivedApkName + "(1)"+".apk");
}
byte[] buffer = new byte [8192];
FileOutputStream fos=new FileOutputStream(apkReceived);
然后它会继续......(我在文件上写东西)。
这样可行,但问题是在这种情况下:
FileTest.apk
FileTest(1)的apk
如果我收到另一个Filetest,它会将我的FileTest(1)分开,因为它会再次创建它。 对此的解决方案是检查文件是否再次存在,但是我必须永远这样做。
我的目标是创建(1)然后(2)等。 你们其中任何一个人都知道怎么做吗?
编辑:显然我可以使用cicle来检查它。问题是如何得到(1)然后得到(2)而得不到(1)(2)答案 0 :(得分:2)
为了避免重新发明轮子,我建议使用Timestamp
它几乎不会发生碰撞。
java.util.Date date= new java.util.Date();
Timestamp tstamp = new Timestamp(date.getTime());
File apkReceived = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/"+receivedApkName + tstamp + ".apk");
答案 1 :(得分:1)
一些伪代码可以帮助您入门:
显然:你应该澄清你对你想要允许的“最大”n的要求;以及创建n份副本时会发生什么;另一个被要求。
答案 2 :(得分:1)
试试这个
String filename =Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/"+receivedApkName + ".apk";
File f = new File(filename);
String extension = ".apk";
int g = 0;
while(f.exists()) {
int i = f.lastIndexOf('.');
if (i > 0)
{ extension = fileName.substring(i+1); }
f.renameTo(f.getPath() + "\" + (f.getName() + g) + "." + extension)
}
答案 3 :(得分:1)
如果您只在目录中存储这种类型的文件,则可以执行以下操作:
File folder = new File("your/path");
File[] listOfFiles = folder.listFiles();
计算下一个文件名的大小和大小+1。
您也可以在自己的目录中使用类似的文件名分隔每个文件。
答案 4 :(得分:1)
做这样的事
File apkReceived = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/"+receivedApkName + ".apk");
if(apkReceived.exists()){
int new_int_postfix;
//Below _MAX is max numbers of file eg. _MAX = 100
for(int i = 1; i < _MAX; i++) {
apkReceived = = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/"+receivedApkName +"("+ i +")"+".apk");
if(!apkReceived.exists()) {
String []name_without_pre = receivedApkName.split("\\(");
receivedApkName = name_without_pre[0];
new_int_postfix = i;
break;
}
}
apkReceived = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/"+receivedApkName + "("+new_int_postfix+")"+".apk");
}
byte[] buffer = new byte [8192];
FileOutputStream fos=new FileOutputStream(apkReceived);