私はこのようなJava.nio.file.Filesでファイルをコピーしようとしています:
Files.copy(cfgFilePath, strTarget, StandardCopyOption.REPLACE_EXISTING);
問題は、Eclipseが「Files型のメソッドcopy(Path、Path、CopyOption ...)は引数(File、String、StandardCopyOption)に適用できない」ということです。
EclipseとWin7 x64でJava 7を使用しています。私のプロジェクトはJava 1.6互換性を使用するように設定されています。
これに対する解決策はありますか、回避策としてこのようなものを作成する必要がありますか?
File temp = new File(target);
if(temp.exists())
temp.delete();
ありがとう。
@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
を使用します。体系的に。考え直しなし。
[〜#〜] edit [〜#〜]NIOを使用して1.6を使用してファイルを別のファイルにコピーすることもできます。 Closer
クラスは Guava によってインスパイアされていることに注意してください。
_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();
}
}
_
エラーメッセージで説明されているように、Path
引数を渡す必要があります。
Path from = cfgFilePath.toPath(); //convert from File to Path
Path to = Paths.get(strTarget); //convert from String to Path
Files.copy(from, to, StandardCopyOption.REPLACE_EXISTING);
これは、strTarget
が有効なパスであることを前提としています。
strTargetは「Path」オブジェクトではなく「String」オブジェクトです
package main.Java;
import Java.io.IOException;
import Java.nio.file.Files;
import Java.nio.file.Path;
import Java.nio.file.Paths;
import Java.nio.file.StandardCopyOption;
public class CopyFileOnExist {
public static void main(String[] args) {
Path sourceDirectory = Paths.get("C:/Users/abc/Downloads/FileNotFoundExceptionExample/append.txt");
Path targetDirectory = Paths.get("C:/Users/abc/Downloads/FileNotFoundExceptionExample/append5.txt");
//copy source to target using Files Class
try {
Files.copy(sourceDirectory, targetDirectory,StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
System.out.println(e.toString());
}
}
}