// 파일을 해당위치로 복사하고 지운다.
public boolean moveFile(String source, String dest) {
boolean result = false;
FileInputStream inputStream = null;
FileOutputStream outputStream = null;
try {
inputStream = new FileInputStream(source);
outputStream = new FileOutputStream(dest);
} catch (FileNotFoundException e) {
e.printStackTrace();
result = false;
}
FileChannel fcin = inputStream.getChannel();
FileChannel fcout = outputStream.getChannel();
long size = 0;
try {
size = fcin.size();
fcin.transferTo(0, size, fcout);
fcout.close();
fcin.close();
outputStream.close();
inputStream.close();
result = true;
} catch (IOException e) {
e.printStackTrace();
result = false;
}
File f = new File(source);
if (f.delete()) {
result = true;
}
return result;
}
소스는 간단하다. 복사할 파일을 FileInputStream으로 만들고 복사할 경로를 FileOutputStream으로 만든뒤 FileChannel을 통해서 복사를 하는 것이다. 그리고 복사한 후에 파일은 삭제해준다. 함수 호출은 아래와 같이 한다.
moveFile(fileObj.getAbsolutePath(), saveDirectory + "/downloads/" + fileName);
파일복사기 때문에 서버의 절대/상대 경로가 아닌 물리적 절대경로가 되어야 한다. fileObj는 File객체이고 saveDirectory는 저장경로의 물리적 경로가 저장되어 있다. fileName은 fileObj객체의 파일명이 저장되어 있다.
saveDirectory는 아래처럼 서버의 경로를 주어서 물리적인 절대경로를 구한다.
saveDirectory = config.getServletContext().getRealPath("/temp");
위의 파일복사 소스는 서비님의 자바 파일복사 코드와 성능 1을 참고해서 작성하였다.(이런류의 소스가 사용하는 방식이 거의 고정되어 있다고는 생각하지만 참고수준을 넘어서서 그냥 그대로 갔다가 약간만 상황에 맞게 고쳤다 ㅡ..ㅡ 보통은 참고한것과 개발하면서 알게된 것을 복합적으로 포스팅하는 편인데 이번경우에는 소스를 많이 바뀌지 않은 관계로 간단히 소스만 보여주고 원본글의 링크로 소스설명은 대체한다.) 자세한 설명을 서비님의 글을 참고 하기 바란다. 아주 자세하게 설명을 해 놓으셨다.
서비님의 포스트에는 파일복사를 하는 3가지 종류가 나와 있는데 이곳에 사용한 것은 3번째 "Channel을 이용한 네이티브OS 기능 사용하기"를 사용한 것이다. 자바 파일복사 코드와 성능 2를 보면 파일복사의 3가지 경우에 대해서 성능테스트까지 한것을 볼수가 있는데 서비님이 추천한대로 성능이 가장 좋아보이는 "Channel을 이용한 네이티브OS 기능 사용하기"를 사용했다.
서비님의 자세한 포스트 덕분에 간단하게 해결.... 감사합니다.
파일업로드에 관한 포스팅 이군요.
잘봤습니다.
저희는 저도 처음입사해서 처음본 방식인데
httpclient를 이용해서 php에서 업로드를 하더군요
리눅스에 다른 파일서버를 마운트 해서 사용하는게 보통인데....
왜 httpclient를 가지고 php에서 업로드를하는지는 ㅡㅡ
php가 가벼워서 그런건지 아님 별다른 것이 있는건지 궁금하네여 ㅋ
예전엔 저도 파일 삭제기능을 귀찮다는 이유로 제대로 삭제가 되지않고
남기는 나쁜기억이 솔솔..ㅋㅋ
즐코딩하세여 ㅋㅋ
httpclient를 처음 들어봐서 찾아봤더니 apache에서 만든 컴포넌트군요. 저도 처음 보는 방식이라 좋은건지 어떤건지도 잘 모르겠네요.
사오정님네 회사가 어떻다는 건 아니지만 제가 겪은 상황에서 보면 좋던 나쁘던 그냥 쓰던걸 쓰는 경향이 꽤 있더군요.
파일삭제 같은 보안등 뒷처리 작업은 해야하면서도 귀찮은게 사실이죠... 처리해야하긴 하는데요.. ㅎㅎㅎㅎ 습관화해야될텐데요.. ㅋ
사오정님도 즐코딩하세요.