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


113

File을 인수로 받아들이는 함수가 있습니다. 내 문자열 데이터를 함수에 전달하기 위해 새 파일 (파일 시스템에 대한 쓰기 액세스 권한이 없음)을 생성 / 작성하고 싶지 않습니다. 문자열 데이터가 파일에 존재하지 않는다고 추가해야합니다 (그래서 파일에서 데이터를 읽을 수 없습니다).

Streams를 사용하여 File 객체로 "캐스트"할 수 있습니까?


2
File객체 를 취하는 코드를 링크 / 게시 할 수 있습니까 ? 답변에서 언급했듯이 File객체는 파일 시스템의 위치에 대한 참조와 같으므로 실제 파일 없이는 시뮬레이션하기가 어렵습니다. 그러나 함수에 a FileReader또는 a FileInputStream가 있으면 파일이 아닌 입력을 허용하도록 코드를 쉽게 수정할 수 있습니다.
101100 2011-08-16

메모리 매핑 된 파일을 선택할 수 있습니다. 이들은 Java 프로그램이 메모리에서 직접 내용에 액세스 할 수 있도록하는 Java의 특수 파일입니다. 자세한 내용은 다음 링크를 통해 확인하십시오 : javarevisited.blogspot.com/2012/01/…
Bacteria

답변:


48

아니; 클래스의 인스턴스는 File파일 시스템의 경로를 나타냅니다. 따라서 해당 기능은 파일에서만 사용할 수 있습니다. 그러나 아마도 InputStream대신에 걸리는 과부하가 있습니까?


76

일반적으로 메서드가 파일을 수락 할 때 스트림을 수락하는 다른 메서드가 근처에 있습니다. 그렇지 않은 경우 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) {
}

1
쓰기 권한을 요청할 수 없습니다 (Google AppEngine)
Jon Romero

12

Java 의 File 객체는 파일 자체가 아니라 디렉토리 또는 파일의 경로를 나타냅니다. File객체 를 생성하기 위해 파일 시스템에 대한 쓰기 액세스 권한이 필요하지 않습니다. 실제로 파일에 쓰려는 경우에만 필요합니다 ( 예 : FileOutputStream 사용 ).


1
파일을 외부 API에 전달해야하는 경우 실제 파일이 필요합니다. "빈"File 객체를 전달하면 작동하지 않습니다.
Andrei Volgin 19

8

File클래스는 I / O에 사용하는 파일이 아닌 실제 핸들의 "생각"을 나타냅니다. 이것이 File클래스 .exists()에 파일이 있는지 여부를 알려주 는 메서드 가있는 이유 입니다. ( File존재하지 않는 물건을 어떻게 가질 수 있습니까?)

대조적으로,를 구성하면 new FileInputStream(new File("/my/file"))바이트를 읽을 실제 스트림 이 제공됩니다.


-1
FileReader r = new FileReader(file);

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.