File을 인수로 받아들이는 함수가 있습니다. 내 문자열 데이터를 함수에 전달하기 위해 새 파일 (파일 시스템에 대한 쓰기 액세스 권한이 없음)을 생성 / 작성하고 싶지 않습니다. 문자열 데이터가 파일에 존재하지 않는다고 추가해야합니다 (그래서 파일에서 데이터를 읽을 수 없습니다).
Streams를 사용하여 File 객체로 “캐스트”할 수 있습니까?
답변
아니; 클래스의 인스턴스는 File
파일 시스템의 경로를 나타냅니다. 따라서 해당 기능은 파일에서만 사용할 수 있습니다. 그러나 아마도 InputStream
대신에 걸리는 과부하가 있습니까?
답변
일반적으로 메서드가 파일을 수락 할 때 스트림을 수락하는 다른 메서드가 근처에 있습니다. 그렇지 않은 경우 API가 잘못 코딩 된 것입니다. 그렇지 않으면 일반적으로 많은 경우 권한이 부여되는 임시 파일을 사용할 수 있습니다. 애플릿 인 경우 쓰기 권한을 요청할 수 있습니다 .
예 :
try {
// Create temp file.
File temp = File.createTempFile("pattern", ".suffix");
// Delete temp file when program exits.
temp.deleteOnExit();
// Write to temp file
BufferedWriter out = new BufferedWriter(new FileWriter(temp));
out.write("aString");
out.close();
} catch (IOException e) {
}
답변
Java 의 File 객체는 파일 자체가 아니라 디렉토리 또는 파일의 경로를 나타냅니다. File
객체 를 생성하기 위해 파일 시스템에 대한 쓰기 액세스 권한이 필요하지 않습니다. 실제로 파일에 쓰려는 경우에만 필요합니다 ( 예 : FileOutputStream 사용 ).
답변
File
클래스는 I / O에 사용하는 파일이 아닌 실제 핸들의 “생각”을 나타냅니다. 이것이 File
클래스 .exists()
에 파일이 있는지 여부를 알려주 는 메서드 가있는 이유 입니다. ( File
존재하지 않는 물건을 어떻게 가질 수 있습니까?)
대조적으로,를 구성하면 new FileInputStream(new File("/my/file"))
바이트를 읽을 실제 스트림 이 제공됩니다.
답변
FileReader r = new FileReader(file);
파일 판독기를 사용하여 파일을로드 한 다음 해당 내용을 문자열 버퍼에 씁니다.
위의 링크는이를 수행하는 방법의 예를 보여줍니다. 이 답변에 대한 다른 게시물은 파일을 메모리에로드한다고 말했듯이 실제 파일을 변경할 계획이없는 한 쓰기 액세스가 필요하지 않습니다.