안드로이드 개발 질문/답변
(글 수 45,052)
http://hangumkj.blogspot.com/2009/06/fileoutputstream.html
위 사이트의 내용중 질문이 있습니다.
위의 코드의 문제점은 fos를 마지막 10번째 fos만 close()를 하는것이 문제 입니다.
FileOutputStream 의 close()메소드를 호출하지 않으면 Windows 시스템에서는 파일을 lock하고 있습니다. lock의 해제는 프로그램을 종료하거나 gc가 일어나서 java가 더이상 참조를 하지 않을때 입니다.
그때에 비로소 삭제 될수 있는것이죠.
linux 시스템에서는 파일을 lock하지 않습니다.
---------------------------------------------------------------------------------------------------------------------------
여기까지가 내용이구요.
1. 위 코드에서 fos의 10번째만 close()를 하고 있다고 했는데, 그럼 어떤식으로 수정을 하면 되는건가요?
그리고 linux 시스템에서는 파일을 lock하지 않는다고 되어 있는데요.
2. 코드에는 문제가 있지만 linux에서는 lock을 하지 않기 때문에 크게 문제가 되지 않는다는 말인가요?
3. 아니면 linux에서는 lock을 하지 않기때문에 linux에서는 그냥 저렇게 쓰는게 맞다 이말인가요?
질문이 좀 어려운것 같기도한데, 고수분들께서 해석 좀 해주세요 ^^;;
부탁드립니다.
위 사이트의 내용중 질문이 있습니다.
FileOutputStream fos = null; try { for(int i=0; i<10;i++) { File file = new File(fullyName); fos = new FileOutputStream(file, true); fos.write(sb.toString().getBytes()); fos.flush(); } } catch(Exception e) { e.printStackTrace(); } finally { fos.close(); }
위의 코드의 문제점은 fos를 마지막 10번째 fos만 close()를 하는것이 문제 입니다.
FileOutputStream 의 close()메소드를 호출하지 않으면 Windows 시스템에서는 파일을 lock하고 있습니다. lock의 해제는 프로그램을 종료하거나 gc가 일어나서 java가 더이상 참조를 하지 않을때 입니다.
그때에 비로소 삭제 될수 있는것이죠.
linux 시스템에서는 파일을 lock하지 않습니다.
---------------------------------------------------------------------------------------------------------------------------
여기까지가 내용이구요.
1. 위 코드에서 fos의 10번째만 close()를 하고 있다고 했는데, 그럼 어떤식으로 수정을 하면 되는건가요?
그리고 linux 시스템에서는 파일을 lock하지 않는다고 되어 있는데요.
2. 코드에는 문제가 있지만 linux에서는 lock을 하지 않기 때문에 크게 문제가 되지 않는다는 말인가요?
3. 아니면 linux에서는 lock을 하지 않기때문에 linux에서는 그냥 저렇게 쓰는게 맞다 이말인가요?
질문이 좀 어려운것 같기도한데, 고수분들께서 해석 좀 해주세요 ^^;;
부탁드립니다.
2. 문제가 될지 안될지는 사용하는 상황에 따라 다릅니다. 말씀대로 문제가 되지 않을수도 있지만....
락이 되는걸 믿고 주변에 다른 코딩이 들어갔다면 또 다른이야기겠죠...
3. 맞다라는게 절대적인 기준을 잡기 힘들거 같은데요..
그냥 상황에 따라 적절히 알고 쓰면 됩니다. 모르면 삽을 푸기 마련이니까요...