입력 변수 중 하나가 java.io.File 유형이 될 것으로 예상되는 방법이 있지만 실제로 얻는 것은 InputStream뿐입니다. 메소드의 서명을 변경할 수 없습니다. 파일 시스템에 실제로 파일을 쓰지 않고 InputStream을 File 유형으로 변환하려면 어떻게해야합니까?InputStream을 가상 파일로 변환하는 방법
답변
이와 비슷한 기능이 작동합니다. 간단히하기 위해 Java 7 기능 (닫기 가능한 리소스로 블록 사용)과 Apache commons-io의 IOUtils를 사용했습니다. 그것들을 사용할 수 없다면 조금 더 길지 만 똑같은 생각입니다.
import org.apache.commons.io.IOUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class StreamUtil {
public static final String PREFIX = "stream2file";
public static final String SUFFIX = ".tmp";
public static File stream2file (InputStream in) throws IOException {
final File tempFile = File.createTempFile(PREFIX, SUFFIX);
tempFile.deleteOnExit();
try (FileOutputStream out = new FileOutputStream(tempFile)) {
IOUtils.copy(in, out);
}
return tempFile;
}
}
createTempFile은 파일 시스템에서 볼 수있는 실제 파일을 실제로 작성하지 않습니까? –
당신은 기술적으로 정확합니다. 위의 코드를 사용하면 임시 파일은 프로그램이 종료되거나 프로그램에서 삭제 될 때까지 존재합니다. – cobbzilla
deleteOnExit의 문서에서는 작업에 의존해서는 안된다고 말합니다. (실제로는 아무 것도하지 않는다고 생각합니다) : http://developer.android.com/reference/java/io/File.html#deleteOnExit(). 또한 파일을 재생하지 않고 오디오를 스트리밍하는 방법을 알고 있다면 여기에 대해 다음과 같이 작성하십시오. http://stackoverflow.com/q/36552381/878126 –
수 없습니다. 입력 스트림은 일] 적으로 일반적인 데이터 스트림이며 실제로 File에서 시작한다는 보증은 없습니다. 누군가가 웹 서비스 읽기에서 InputStream을 만들었거나 String을 InputStream으로 변환했다면이 파일을 파일에 연결할 수 없습니다. 따라서 실제로 스트림에서 임시 파일 (예 : File.createTempFile 메소드 사용)에 데이터를 쓰고이 파일을 메소드에 전달하면됩니다.
사실 [[File # createTempFile()'] (http://download.oracle.com/javase/6/docs/api/java/io/File .html # createTempFile % 28java.lang.String, % 20java.lang.String % 29) 정말 최선의 방법입니다. – BalusC
['File # deleteOnExit()'] (http://download.oracle.com/javase/6/docs/api/java/io/File.html#deleteOnExit%28%29)을 참조하십시오. JVM JVM이 종료 될 때 자동으로 파일을 삭제하려고 시도합니다. 물론 파일이 더 이상 필요 없으며 더 이상 사용되지 않는다는 것을 알게되면 수동으로 임시 파일을 즉시 삭제하는 것이 가장 좋습니다. 그러나 불완전한 세계에서는 때로는 불완전한 해결책이 필요합니다. –
- 1. AutocadDWG를 PDF 파일로 변환하는 방법?
- 2. InputStream을 FileInputStream으로 변환 하시겠습니까?
- 3. .prc 파일을 .mobi 파일로 변환하는 방법
- 4. Ant를 사용하여 .jar 파일로 디렉토리를 변환하는 방법
- 5. 델파이에서 HTML 파일을 pdf 파일로 변환하는 방법
- 6. Excel 파일을 SQL 파일로 변환하는 방법
- 7. ipa 파일을 deb 파일로 변환하는 방법
- 8. 엑셀 파일을 mdf 파일로 변환하는 방법
- 9. vs.net에서 csv 파일을 XLS 파일로 변환하는 방법
- 10. Xml 파일을 텍스트 파일로 변환하는 방법
- 11. Xml 파일을 텍스트 파일로 변환하는 방법 2
- 12. 바이트 배열을 메일 첨부 파일로 변환하는 방법
- 13. .xls 파일을 .dbf 파일로 변환하는 방법?
- 14. XSLT를 사용하여 XML을 텍스트 파일로 변환하는 방법
- 15. Eclipse 실행 구성을 .bat 파일로 변환하는 방법
- 16. Android에서 InputStream을 로깅하고 구문 분석하는 방법
- 17. 문서 또는 노드에서 InputStream을 생성하는 방법
- 18. https, 청크 푸시 서블릿의 InputStream을 얻는 방법?
- 19. pdf 파일을 CSV 파일로 변환하는 방법은 무엇입니까?
- 20. Windows 기본 가상 키 코드를 Qt :: Key로 변환하는 방법?
- 21. Canvas3D에서의 움직임을 가상 3D 세계에서의 움직임으로 변환하는 방법
- 22. python에서 reportlab없이 pdf 파일로 텍스트 파일을 변환하는 방법?
- 23. 압축 된 사운드 파일을 압축되지 않은 파일로 변환하는 방법
- 24. C#. XML에서 XML 파일로 PDF 파일을 변환하는 방법?
- 25. 액세스 2000 VBA에서 xls 파일을 csv 파일로 변환하는 방법?
- 26. 여러 PNG 이미지를 하나의 TIFF 파일로 변환하는 방법
- 27. .rpm 파일을 Fedora 10의 .deb 파일로 변환하는 방법
- 28. 자바를 사용하여 HTML 웹 페이지를 PDF 파일로 변환하는 방법
- 29. 64 비트 rpm 파일을 32 비트 rpm 파일로 변환하는 방법
- 30. .ui (사용자 인터페이스) 파일을 QT에서 .exe 파일로 변환하는 방법
이것은 내장 기능입니까? 또는 사용자 정의 함수입니까? –
@Richard : * "메서드의 서명을 변경할 수 없습니다."* – BalusC
정확히 InputStream 대신에'File' 개체가 필요한 이유는 무엇입니까? – Poindexter