관계, Networking 그리고 Programming

File을 만들었는데, file not found라니?

androbook 본캐 2013. 8. 5. 14:14

오늘 오전 쓸데없이 두 시간쯤 허비하게 만들었던 에러. 파일을 만들고 이 파일에 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