[java] Java의 문자열에서 메모리에 File 객체 만들기

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);

파일 판독기를 사용하여 파일을로드 한 다음 해당 내용을 문자열 버퍼에 씁니다.

위의 링크는이를 수행하는 방법의 예를 보여줍니다. 이 답변에 대한 다른 게시물은 파일을 메모리에로드한다고 말했듯이 실제 파일을 변경할 계획이없는 한 쓰기 액세스가 필요하지 않습니다.


답변