Java6中java.nio.file.Path的替代方案,以实现操作系统文件系统的灵活性
我正在将一个代码向后移植到JavaSE6,我希望为我的代码提供一个与操作系统无关的文件检索。我已经在SE7上有了一个非常有效的代码 这就是我在JavaSE7上使用它的方式Java6中java.nio.file.Path的替代方案,以实现操作系统文件系统的灵活性,java,io,operating-system,Java,Io,Operating System,我正在将一个代码向后移植到JavaSE6,我希望为我的代码提供一个与操作系统无关的文件检索。我已经在SE7上有了一个非常有效的代码 这就是我在JavaSE7上使用它的方式 protected Properties getPropertiesFromFileSystemPath(final String filename) throws IOException { if (filename != null) { Path p = FileSystem
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();
}
}
使用此代码,我可以指向一个文件foo\bar\file.txt
或foo/bar/file.txt
在JavaSE6中是否有一种像使用
java.nio.file.Path
一样简单的替代方法?如果您正在接收单个文件,那么使用这个Path concat函数是一种过分的做法
您只需使用新文件输入流(文件名)
。它将在/
和\
上正常工作,即使您将它们混在一起
关闭打开的输入流非常重要。在java7中,您可以使用自动关闭功能:
try (InputStream is = new FileInputStream(filename)) {
return getProperties(is);
}
在Java6中,您需要自己关闭它:
InputStream is = new FileInputStream(filename);
try {
return getProperties(is);
} finally {
if (is != null) is.close();
}
除非你不需要做
如果(is!=null)
,因为is
在那一点上不能为null。感谢@Boschi提供的关闭提示。我发现,至少在Java 6中,当在windowsfile.txt
中访问同一目录下的文件时,我会使用unix文件路径方式来处理文件。