爲補充@assylias'回答:
如果你使用的Java 7,下降File
完全。你想要的是Path
。
並獲得Path
對象匹配的道路上你的文件系統,你這樣做:
Paths.get("path/to/file"); // argument may also be absolute
得到真正的快習慣了。請注意,如果您仍然使用需要File
的API,則Path
的方法有.toFile()
。
需要注意的是,如果你是在你使用它返回File
對象的API不幸的情況下,你總是可以做:
theFileObject.toPath()
但在你的代碼,使用Path
。系統化。沒有第二個想法。
編輯使用NIO使用1.6複製文件到另一個可以這樣完成;注意:Closer
類是由Guava inspited:
public final class Closer
implements Closeable
{
private final List<Closeable> closeables = new ArrayList<Closeable>();
// @Nullable is a JSR 305 annotation
public <T extends Closeable> T add(@Nullable final T closeable)
{
closeables.add(closeable);
return closeable;
}
public void closeQuietly()
{
try {
close();
} catch (IOException ignored) {
}
}
@Override
public void close()
throws IOException
{
IOException toThrow = null;
final List<Closeable> l = new ArrayList<Closeable>(closeables);
Collections.reverse(l);
for (final Closeable closeable: l) {
if (closeable == null)
continue;
try {
closeable.close();
} catch (IOException e) {
if (toThrow == null)
toThrow = e;
}
}
if (toThrow != null)
throw toThrow;
}
}
// Copy one file to another using NIO
public static void doCopy(final File source, final File destination)
throws IOException
{
final Closer closer = new Closer();
final RandomAccessFile src, dst;
final FileChannel in, out;
try {
src = closer.add(new RandomAccessFile(source.getCanonicalFile(), "r");
dst = closer.add(new RandomAccessFile(destination.getCanonicalFile(), "rw");
in = closer.add(src.getChannel());
out = closer.add(dst.getChannel());
in.transferTo(0L, in.size(), out);
out.force(false);
} finally {
closer.close();
}
}
來源
2013-06-18 13:08:07
fge
+1完全同意 - 我幾乎不再使用文件。 – assylias
我不知道這是否會工作,當我編譯Java 1.6的合規性水平如上所述,但無論如何謝謝你的筆記,將銘記未來。 –
@commander_keen你的意思是你將部署的代碼運行1.6 JVM嗎? – fge