2011-08-16 4 views
68

File을 인수로 허용하는 함수가 있습니다. 필자는 문자열 데이터를 함수에 전달하기 위해 새로운 파일 (파일 시스템에 대한 쓰기 권한이 없음)을 작성/작성하고 싶지 않습니다. 나는 문자열 데이터가 파일에 존재하지 않는다는 것을 추가해야한다. 그래서 파일로부터 데이터를 읽을 수 없다.Java 문자열에서 메모리에 File 객체 만들기

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

+2

'File' 객체를 사용하는 코드를 링크하거나 게시 할 수 있습니까? 답이 말했듯이'File' 객체는 파일 시스템의 위치에 대한 참조와 같으므로 실제 파일이 없으면 시뮬레이션하기가 어렵습니다. 그러나, 함수가'FileReader' 나'FileInputStream'을 취한다면, 비 파일 입력을 받아들이도록 코드를 쉽게 수정할 수 있습니다. – 101100

+0

메모리 매핑 된 파일을 선택할 수 있습니다. 이들은 Java 프로그램이 메모리에서 직접 내용에 액세스 할 수있게 해주는 Java의 특수 파일입니다. 자세한 내용은 다음 링크를 참조하십시오. http://javarevisited.blogspot.com/2012/01/memorymapped-file-and-io-in-java.html – Bikku

답변

32

없음; 클래스 File의 인스턴스는 파일 시스템의 경로를 나타냅니다. 따라서이 기능은 파일에만 사용할 수 있습니다. 하지만 과부하가 발생하여 대신 InputStream이 필요합니까?

+0

아니요 :/과부하 기능 없음 –

-1
FileReader r = new FileReader(file); 

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

example

링크는 위의 당신에게이 작업을 수행하는 방법의 예를 보여줍니다. 이 답변의 다른 게시물에서 메모리에 파일을로드하는 것은 실제 파일을 변경할 계획이 없다면 쓰기 권한이 필요하지 않다는 것입니다.

7

File Java의 개체는 파일 자체가 아닌 디렉터리 또는 파일의 경로를 나타냅니다. File 객체를 만들기 위해 파일 시스템에 대한 쓰기 권한이 필요하지 않습니다. 예를 들어 FileOutputStream을 사용하여 실제로 파일에 쓸 경우에만 필요합니다.

3

File 클래스는 "아이디어" I/O에 사용할 실제 핸들이 아닙니다. 따라서 File 클래스에 파일이 있는지 여부를 알려주는 .exists() 메서드가있는 이유가 여기에 있습니다. (실제로 존재하지 않는 File 개체를 가질 수 있습니까?)

대조적으로 new FileInputStream(new File("/my/file"))을 구성하면 실제 스트림에서 바이트를 읽을 수 있습니다.

+2

좋은 지적; 그래도 질문에 대답하지 않습니다. – Jus12

47

일반적으로 메소드가 파일을 받아 들일 때 근처에 스트림을 허용하는 다른 메소드가 있습니다. 그렇지 않은 경우 API가 잘못 코딩됩니다. 그렇지 않으면 임시 파일을 사용할 수 있습니다. 일반적으로 권한은 대개의 경우 부여됩니다. 애플릿의 경우 request write permission 수 있습니다.

예 :

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) { 
} 
+0

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