오늘 오전 쓸데없이 두 시간쯤 허비하게 만들었던 에러. 파일을 만들고 이 파일에 write를 시도하니 file not found 에러가 발생한다. 대략 소스는 다음과 같았다.
sendFile = new File(Environment.getExternalStorageDirectory() + File.separator + getPackageName() + File.separator + "Export/test.txt");
외부 저장 매체 경로를 찾아, 내 프로그램명으로 폴더를 생성하고, 다시 export라는 폴더를 생성해서 그 아래에 test.txt라는 파일을 생성한 것이다.
자, 이 소스의 바로 아래에서 다음과 같이 file output stream을 만들라치면 sendFile에 대해 "file not found" 에러가 발생한다.
f = new FileOutputStream(sendFile);
음? sendFile은 정상적으로 생성되었는데, 어째서 이것으로 file output stream을 만들면 파일이 없다고 나오는가? 로 한참 구글을 뒤적여보니, 폴더와 파일을 한 번에 생성할 수가 없는거구나...라는 사실을 알게 되었다.
그러니까 위 소스코드의 문제는, 기존에 있는 디렉토리에, 한 줄의 소스로 두 개의 디렉토리와, 하나의 파일을 만들겠다는 시도를 했다는 것이다.
따라서 다음과 같이 수정하여 정상 동작하는 것을 확인했다.
sendFile = new File(Environment.getExternalStorageDirectory() + File.separator + getPackageName() + File.separator + "Export");
if(!sendFile.exists()){
sendFile.mkdirs();
testFile = new File(sendFile, "test.txt");
}
...
f = new FileOutputStream(testFile);
: 먼저, 디렉토리는 여러개를 동시 생성할 수 있으므로, 원하는 디렉토리 경로를 mkdirs() 함수를 사용해서 생성해 준 후, 해당 디렉토리에 원하는 파일을 생성한다.
이제 에러 없이 잘 동작함. :D
자, 그렇게 삽질 마무리. 자, 이제 뒤 이어서 코딩코딩~.
from. tumblr
'관계, Networking 그리고 Programming' 카테고리의 다른 글
Missing SDK Platform Android, API 19 (2) | 2013.12.20 |
---|---|
setLayoutParams 에러 (1) | 2013.08.26 |
하나의 TextView(EditText)에 서로 다른 크기의 글씨 넣기. (0) | 2013.06.21 |
충격과 경악의 삽질!!! (7) | 2013.06.14 |
finishActivity()는 셀프 종료가 아니다. (0) | 2013.06.12 |