请参阅以下(两个)解决方案的答案。
我似乎无法理解我的逻辑,并且由于某种原因,这确实得到了我,但它似乎(并且可能是)如此简单。我想要做的是捕获图像,如果存在,则增加图像。即photo1.jpg存在,所以保存新文件为photo2.jpg等。
当我运行我的代码并拍摄照片时,“photo.jpg”被保存,然后在下一次拍摄时,“photo1.jpg”被保存,然后是“photo11.jpg”,然后是“ photo111.jpg“等等。
这是我的代码:
String photoName = "photo.jpg";
String i = "0";
int num = 0;
File photo = new File(Environment.getExternalStorageDirectory(), photoName);
while(photo.exists()) {
//photo.delete();
num = Integer.parseInt(i);
num++;
String concatenatedNum = Integer.toString(num);
StringBuffer insertNum = new StringBuffer(photoName);
photoName = insertNum.replace(5, 5, concatenatedNum).toString();
//insert
photo = new File(Environment.getExternalStorageDirectory(), photoName);
}
FileOutputStream fostream = null;
try {
fostream = new FileOutputStream(photo.getPath());
//MediaStore.Images.Media.insertImage(getContentResolver(), yourBitmap, yourTitle, yourDescription);
//write jpeg to local drive
fostream.write(jpeg[0]);
fostream.close();
}
catch (IOException e) { e.printStackTrace(); }
finally
{
if(fostream != null)
{
try
{
fostream.flush();
fostream.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
非常感谢任何帮助。
感谢。
我已经实现了以下解决方案,现在无论我捕获多少图像,我最终只会得到2个文件。 'photo.jpg'和'photo1.jpg'已成功保存,但未保存其他图像。他们甚至没有被写下来。有什么帮助吗?
现在代码如下:
String photoName = "photo.jpg";
String i = "0";
int num = 0;
File photo = new File(Environment.getExternalStorageDirectory(), photoName);
while(photo.exists()) {
//photo.delete();
num = Integer.parseInt(i);
num++;
photoName = "photo" + num + ".jpg";
photo = new File(Environment.getExternalStorageDirectory(), photoName);
//String concatenatedNum = Integer.toString(num);
//StringBuffer insertNum = new StringBuffer(photoName);
//photoName = insertNum.insert(5, concatenatedNum).toString();
}
答案 0 :(得分:7)
将while
循环替换为:
while(photo.exists()) {
num++;
photoName = "photo"+num+".jpg";
photo = new File(Environment.getExternalStorageDirectory(), photoName);
}
答案 1 :(得分:2)
对于新解决方案 - 为什么你有以下一行?
num = Integer.parseInt(i);
我永远不会改变,所以num也永远不会改变。看起来代码只会无限循环。如果删除该行,它应该有效。