2012-02-05 2 views
1

내 JSF2 응용 프로그램에서 파일을 업로드하기 위해 this tutorial을 추적했습니다. 응용 프로그램이 정상적으로 작동하지만 한 가지 측면에서 만족스럽지 않습니다. 요청을 다시 작성하는 동안 요청을 통해 전송 된 파일이 디스크의 어딘가에 저장됩니다.업로드 된 파일을 이동하거나 이름을 바꾸는 방법은 무엇입니까?

파일이 저장되었지만 조치 메소드가 들어있는 Managed Bean을 입력 한 후 사용할 수있는 이름으로 파일의 이름을 바꿔야합니다.

따라서 원하는 이름으로 새 파일을 만들고 이미 저장된 파일을 복사 한 다음 불필요한 파일을 삭제하기로 결정했습니다. 이 내 질문 있습니다 "잘못된 또는 지원되지 않는 PNG 파일"

:

내가 파일을 열려고 할 때

private File uploadFile; 
//... 
try { 
    BufferedWriter bw = new BufferedWriter(new FileWriter(newFile)); 
    BufferedReader br = new BufferedReader(new FileReader(uploadFile)); 

    String line = ""; 
    while ((line = br.readLine()) != null){ 
     bw.write(line); 
    } 
} catch (Exception e){} 

새 파일은 원하는 위치에 표시되지만이 오류가 발생합니다

  1. 이 문제를 해결하는 더 좋은 방법이 있습니까?
  2. 이 솔루션이 사진을 업로드하는 가장 좋은 방법입니까? 사진의 크기를 조정하거나 원하는 이름을 아직 사용할 수 없을 때 비즈니스 논리 전에 파일을 저장해야하는 이유가 있습니까?

LE : 은 나뿐만 아니라 this tutorial ABOT 알고 있지만 나는이 인 Mojarra 만 할 노력하고있어.

답변

2

이미지와 같은 이진 파일을 처리 할 때 ReaderWriter을 사용하지 마십시오. 스트림을 사용하십시오 : FileInputStreamFileOutputStream. 가장 좋은 방법은 renameTo 방법으로 @Perception 솔루션을 사용하는 것입니다.

독자는 파일이 문자 (예 : txt, 속성, yaml 파일)로 구성되어있는 것처럼 파일을 읽습니다. 이미지 파일은 문자가 아니며 이진 파일이므로 스트림을 사용해야합니다.

3

이미 java.io.File 개체에 이름 바꾸기 메서드가 내장되어 있습니다. 사용자 환경에 맞지 않는 경우 놀랄 것입니다.

 
public boolean renameTo(File dest) 

    Renames the file denoted by this abstract pathname. 

    Many aspects of the behavior of this method are inherently platform-dependent: 
    The rename operation might not be able to move a file from one filesystem to 
    another, it might not be atomic, and it might not succeed if a file with the 
    destination abstract pathname already exists. The return value should always 
    be checked to make sure that the rename operation was successful. 

파일이 저장하기 전에 존재하는 경우 또한 확인할 수 있습니다, 당신은 저장 초기를 수행하기 전에 업로드 된 파일에 대한 검증을 수행 할 ImageIO에서 클래스를 사용할 수 있습니다.

관련 문제