2017-04-06 1 views
0

코드를 Java SE6으로 백 포트하고 있으며 코드에 OS 독립적 인 파일 검색 기능이 필요합니다. 이미 훌륭한 SE7 코드가 있습니다.OS6 용 Java6에서 java.nio.file.Path에 대한 대체 파일 시스템 유연성

이것은 Java SE7에서 사용하는 방법입니다. 내가 파일 foo\bar\file.txt 또는 foo/bar/file.txt을 가리킬 수 있습니다 발견됩니다이 코드

 protected Properties getPropertiesFromFileSystemPath(final String filename) throws IOException { 
     if (filename != null) { 
      Path p = FileSystems.getDefault().getPath(""); 
      final InputStream inputStream = new FileInputStream(p.resolve(filename).toFile()); 
      return getProperties(inputStream); 
     } else { 
      throw new IOException(); 
     } 
     } 

.

Java SE6에서 java.nio.file.Path을 사용하는 것만 큼 쉬운 방법이 있습니까?

답변

1

하나의 파일을 수신하는 경우이 경로 연결 기능을 사용하면 잔인합니다.

간단하게 new FileInputStream(filename)을 사용할 수 있습니다. 혼합하여도 /\ 모두에서 올바르게 작동합니다.

그리고 열어 놓은 입력 스트림을 닫는 것이 매우 중요합니다. java7에서 당신은 autocloseable 기능을 사용할 수 있습니다 : Java6에서

try (InputStream is = new FileInputStream(filename)) { 
    return getProperties(is); 
} 

당신은 스스로를 종료해야합니다

InputStream is = new FileInputStream(filename); 
try { 
    return getProperties(is); 
} finally { 
    if (is != null) is.close(); 
} 
+0

'is (is! = null)'을 할 필요가 없다는 점을 제외하면'is'는 null이 될 수 없기 때문에. –

+0

종결에 대한 팁 @Boschi에 감사드립니다. 필자는 적어도 Java 6에서 윈도우'file.txt'에서'. \ file.txt'와 같은 디렉토리에있는 파일에 액세스 할 때 파일을 처리 할 때 유닉스 파일 경로 방법을 사용할 것이라고 생각했습니다. –

0

잘 모르겠어요,하지만 난 File 목적 이외의 다른 아무것도 생각합니다. 또한 Path의 원하는 부분을 지정해야합니다. 그러나 File 객체로 할 수있다 :

  • 이 존재하는() 등 ISFILE(), isDirectory(), getPath(), mrdir (들)(), createNew (온도) (파일)의 대부분 당신이 필요할 수도있는 것들
  • 나는 모든 I/O 스트림이 생성자에서 File을 받아 들일 것으로 믿는다. 그래서 아무런 문제가 없다.
  • 디렉토리의 경로와 사용 된 메소드 (예 : mkdir() 및 isDirectory()). 따라서이 파일에서 File은 Directory입니다 (Path는 가능합니다).

주요 단점은 File 객체가 변경 불가능하다는 것입니다. 실제로는 디렉토리의 경로를 포함하는 File을 가질 수 있으며, 첫 번째 파일의 경로를 호출 한 다음 필요한 파일을 추가하여 다른 파일을 작성할 수 있습니다.

FileSystems.getDefault(). getPath ("") 그렇다면 Path 클래스와 관련이 없다고 생각합니다. 그래서 당신은 어떻게 든 다른 질문을하고 그 대안을 찾아야 할 것입니다.