2013-02-26 2 views
0

사진을 찍는 곳의 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 { 
     } 

} 
}; 

내가이를 넣어 시도하지만 오류가 얻을 작동하지 않습니다

사람이 MEP 도와 드릴까요
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(); 

를?

+0

어디에서 오류가 발생합니까? 오류가 무엇입니까? – RvdK

+0

디버거에 파일과 비슷한 내용이 없습니다. – wiki

+0

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) : \t at java.io.FileOutputStream. (FileOutputStream.java:88) 02-26 15 : 55 : 54.117 : W/System.err (10701) : \t at java.io.FileOutputStream. (FileOutputStream.java:128) 02-26 15 : 55 : 54.117 : W/System.err (10701) : \t at java.io.FileOutputStream. (FileOutputStream.java:117) 02-26 15 : 55 : 54.125 : W/System.err (10701) : 원인 : libcore.io.ErrnoException : 열기 실패 : ENOENT (해당 파일 또는 디렉토리 없음) – wiki

답변

0

파일 이름에는 '/'를 사용할 수 없습니다. 이것은 시스템에 의해 디렉토리 세트로 해석되며, 미리 모든 디렉토리를 작성하지 않으면이 오류가 발생합니다. 예를 들어 2014 년 1 월 1 일인 경우 파일 이름은 /mnt/extSdCard/Photos/01/01/2014.jpg가됩니다.

01/01 디렉토리를 만들거나 구분 기호를 '_'또는 '-'와 같이 다른 것으로 변경해야합니다.

또한/mnt/extSdCard를 사용하는 장치의 화이트리스트가 없어도 하드 코드하지 마십시오. 모든 Nexus 기기를 포함한 많은 기기에는 존재하지 않습니다.

+0

대단히 감사합니다. 사용 해보겠습니다. 코드는 다음과 같습니다.'code' String name = day + "-"+ month + "-"+ year + ".jpg"; 나는 그것이 효과가있을 것이라고 생각한다. 나는 많은 웹 사이트에서 하드 코드를 사용하는 나쁜 습관을 읽었지 만, 삼성 기기에서는 evirotment를 사용하는 것이 불가능하거나 적어도 그것을 얻는 방법을 찾지 못했습니다. – wiki

0

당신은 환경에서 폴더를 열 수 있도록해야합니다

문자열 폴더 = Environment.getExternalStorageDirectory() + "/ 사진 /"를;

그런 다음 사진이 폴더로 존재하는지 확인하십시오. 그렇지 않으면, 당신은 그것을 만들 수 있습니다.

+0

함수 Environment.getExternalStorageDirectory()는 안드로이드 4.0.4에서 더 이상 사용되지 않습니다. 이것은 외부 sd 카드에서 파일을 읽을 때 "/ mnt/extSdCard /"경로로 사용하기 때문에 문제가되지 않습니다. – wiki

+0

하드 코드 된 경로를 사용하지 마십시오. 그것은 다른 안드로이드 장치에 침입합니다. 환경을 사용하여 쓰기 가능한 디렉토리를 검색하십시오. – RvdK

+0

그런데 안드로이드 웹 페이지에서는 더 이상 사용되지 않습니다. http://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory() – RvdK