【问题标题】:Naming a photo (date)为照片命名(日期)
【发布时间】:2013-02-26 14:26:51
【问题描述】:

我正在为我拍摄照片的 andorid 开发应用程序。问题是我只以毫秒为单位保存 conseguidor 当前时间,我想输入当前日期(dd / mm / yyyy)。

这是我的代码:

PictureCallback jpegCallback = new PictureCallback() 
{
    public void onPictureTaken(byte[] data, Camera camera)
    {
    FileOutputStream outStream = null;
    try
        {               
    outStream = new FileOutputStream(String.format("/mnt/extSdCard/Photos/%d.jpg", System.currentTimeMillis()));    
    outStream.write(data);
    outStream.close();

    } catch (FileNotFoundException e) {
            e.printStackTrace();
    } catch (IOException e) {
            e.printStackTrace();
    } finally {
        }

}
};

我试图把这个,但不起作用我得到错误:

Calendar c = Calendar.getInstance();
String day = Integer.toString(c.get(Calendar.DATE));
String month = Integer.toString(c.get(Calendar.MONTH));
String year = Integer.toString(c.get(Calendar.YEAR));

String name = day + "/" + month + "/" + year + ".jpg";
String folder = "/mnt/extSdCard/Photos/";
String path = folder + name;

...

outStream = new FileOutputStream(String.format(path));  
outStream.write(data);
outStream.close();

谁能帮帮我?

【问题讨论】:

  • 错误出现在哪里?错误是什么?
  • 调试器说类似文件不存在
  • 02-26 15:55:54.117:W/System.err(10701):java.io.FileNotFoundException:/mnt/extSdCard/Potos/26/1/2013.jpg:打开失败: ENOENT(没有这样的文件或目录)02-26 15:55:54.117:W/System.err(10701):在 java.io.FileOutputStream.(FileOutputStream.java:88) 02-26 15:55: 54.117: W/System.err(10701): 在 java.io.FileOutputStream.(FileOutputStream.java:128) 02-26 15:55:54.117: W/System.err(10701): 在 java.io .FileOutputStream.(FileOutputStream.java:117) 02-26 15:55:54.125: W/System.err(10701): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory )

标签: android android-camera android-photos


【解决方案1】:

您不能在文件名中使用“/”。系统将其解释为一组目录,除非您提前创建了所有目录,否则您将收到此错误。例如,如果是 2014 年 1 月 1 日,您的文件名将是: /mnt/extSdCard/Photos/01/01/2014.jpg.

您需要创建 01/01 目录,或者将分隔符更改为其他内容,例如“_”或“-”。

此外,如果没有至少要使用它的设备白名单,请勿对 /mnt/extSdCard 进行硬编码。它不存在于许多设备上,包括所有 Nexus 设备。

【讨论】:

  • 非常感谢,我会尽量使用代码如下:codeString name = day + "-" + month + "-" + year + ".jpg";我认为它会起作用。我在许多网站上读到使用硬代码是一种不好的做法,但在三星设备中是不可能使用 evirotment 的,或者至少我还没有找到如何获得它。
【解决方案2】:

你应该从环境中创建文件夹字符串:

字符串文件夹 = Environment.getExternalStorageDirectory() + "/Photos/";

然后确保照片作为文件夹存在。否则,您应该创建它。

【讨论】:

  • 函数 Environment.getExternalStorageDirectory() 在 android 4.0.4 中已弃用,这不是问题,因为当我从外部 sd 卡读取文件时,我使用路径“/mnt/extSdCard/”和它作品
  • 不要使用硬编码路径。它将在不同的 Android 设备上中断。使用环境检索可写目录。
  • 顺便说一句,我没有看到它在 Android 网页上已被弃用:developer.android.com/reference/android/os/…
  • 我说您认为此功能不适用于将 sdcar 作为内部存储器 y extSdCard 作为外部存储器的文件夹的设备,在开发人员中可以这样说,但如果您阅读论坛,您会阅读使用硬编码路径
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 2015-11-11
  • 2012-01-24
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
相关资源
最近更新 更多