当前位置: 首页 > 面试题库 >

用Java复制文件并替换现有目标

张通
2023-03-14
问题内容

我正在尝试使用java.nio.file.Files复制文件,如下所示:

Files.copy(cfgFilePath, strTarget, StandardCopyOption.REPLACE_EXISTING);

问题在于Eclipse表示“文件类型中的方法copy(Path,Path,CopyOption
…)不适用于参数(File,String,StandardCopyOption)”

我在Win7 x64上使用Eclipse和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

快速习惯它。需要注意的是,如果你仍然使用需要的API FilePath有一个.toFile()方法。

请注意,如果不幸的是您使用返回File对象的API ,则始终可以执行以下操作:

theFileObject.toPath()

但在您的代码中,使用Path。系统地。不用再想了。

编辑 可以使用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();
    }
}


 类似资料:
  • 问题内容: 我需要一些帮助来创建文件 我在过去的几个小时中尝试使用RandomAccessFile并尝试实现下一个逻辑: 获取文件对象 创建一个具有相似名称的临时文件(我如何确保将临时文件与给定的原始文件放置在同一位置?) 写入此文件 用临时文件替换磁盘上的原始文件(应使用原始文件名)。 我正在寻找一个简单的代码,谁喜欢使用RandomAccessFile,我只是不正确地解决这几个步骤。 编辑:好

  • 我试图在一个特定文件夹中保存多个图像第一个图像保存正确,但下一个图像只是替换第一个图像。如何保存多个图像?如何动态命名并使用相同的名称保存图像,但使用不同的扩展名,如image、image1、image2。。。下面是我的代码

  • 问题内容: 我有一个名为FormatString.java的文本文件。它包含一些单词。在所有这些单词中,我想将单词oldstring替换为newstring,并将最终结果重命名为t.txt。我已经编写了代码。从技术上讲,它应该起作用。问题是我不知道在哪里保存FormatString.java文件。我是否将其保存在保存了ReplacingText程序的同一类文件夹中,还是将其保存在其他地方。我转到命

  • 我正在尝试使用Java复制文件。我有一个需要复制的文件对象的arraylist,但是当实际复制发生时,目标文件夹会变成一个文件,不会复制任何东西

  • 我有一个大的json存储在一个字符串中。我想更改字符串的某些部分,但出现以下错误: 5/>(Pattern.java:3104)java.util.regex.Pattern.sequence(Pattern.java:2101)java.util.regex.Pattern.expr(Pattern.java:1964)java.util.regex.Pattern.compile(Patter