2017-09-09 9 views
0

MemoryFileSystem에 의해 생성 된 FileSystem이 있습니다. 실제 파일 시스템에 메모리 FileSystem의 폴더에 "매핑"하는 폴더가 있기를 원합니다. 그래서 생성 된 모든 파일은 메모리에 쓰여지고 디스크에는 쓰이지 않습니다. 나는 이런 식으로 이야기 할 때 "Symlink"라는 용어가 쓰여지는 것을 들었다. 그러나 그것이 내가하려고하는 것이 확실하지 않다. 이 작업을 수행하는 올바른 방법이 있습니까?MemoryFileSystem을 Java의 일반 FileSystem에 연결하십시오.

나는 Files.createSymbolicLink(memoryRootPath, realFolderPath);을 시도했지만 그 날이 오류를 제공합니다

Exception in thread "main" java.nio.file.ProviderMismatchException: expected a path of provider memory but got file 

감사합니다!

+0

_either_에서 생성 된 모든 파일은 디스크에 기록되지 않습니까? 그럼 어떻게 만들어 지나요? 이것은 Java가 제공하지 않는 저수준 파일 시스템 액세스를 의미하는 것 같습니다. – pvg

+0

필자는 메모리 파일 시스템에 무엇이 있는지보기 만하면 디스크에 "진짜"가 아닌 메모리 파일 시스템에 기록해야한다는 것을 의미했습니다. –

답변

1

우선, 잘못된 방향으로 심볼릭 링크를 만들려고합니다. 실제 파일 시스템의 파일을 메모리 파일 시스템에 "매핑"하려면 심볼릭 링크가 메모리 파일 시스템을 가리키는 실제 파일 시스템에 있어야합니다.

하지만 그렇게 할 수는 없습니다.

실제 파일 시스템은 운영 체제에 의해 구현되며 메모리 파일 시스템에 대한 지식이 없습니다. 이는 OS가 심볼릭 링크를 해결할 수 없음을 의미합니다. symlink (실제 파일 시스템에서)는 OS가 알고있는 파일 시스템의 어떤 것을 참조해야합니다.

이와 비슷한 것을 구현하려면 OS가 이해하는 파일 시스템을 사용해야합니다. 예를 들어, Linux에서는 메모리/가상 메모리에 의해 뒷받침되는 "tmpfs"파일 시스템을 생성 할 수 있습니다. 그런 다음 일반 디렉토리에 마운트하고 tempfs의 파일이나 디렉토리를 가리키는 일반 파일 시스템의 심볼릭 링크를 만들 수 있습니다. 시스템을 재부팅하면 tempfs가 삭제됩니다.


귀하의 경우 예외가 발생하는 이유는 구현 제한이 MemoryFileSystem입니다. 의도적으로 설계된 것입니다.

이론적으로
private AbstractPath castPath(Path path) { 
    if (!(path instanceof AbstractPath)) { 
     throw new ProviderMismatchException("expected a path of provider " + 
      SCHEME + " but got " + path.getFileSystem().provider().getScheme()); 
    } 
    return (AbstractPath) path; 
} 

이 심볼릭 링크는 실제 파일 시스템에 MemoryFileSystem에서 작동하도록 할 수 있지만,해야

  • 당신이 MemoryFileSystem 포크해야하고,
  • 나는 그것을 생각하지 않는다 당신이하려고하는 것을 할 것입니다.