如何在Scala中将文件/文件从一个文件夹移动到另一个文件夹

时间:2016-05-26 11:10:05

标签: java scala

我是Scala的新手。
我google了很多,但只发现了如何用Java移动文件。我尝试使用Java import Java.io.File

移动文件

并使用两个文件.move(" FileA"," FileB",StandardCopyOption.REPLACE_EXISTING); 和Files.move(" DirA"," DirB",StandardCopyOption.ATOMIC_MOVE);

但它没有用。我的代码看起来像这样:
Files.move(" / public"," / public / images",StandardCopyOption.ATOMIC_MOVE);

我想将文件从public移至public/images

3 个答案:

答案 0 :(得分:5)

根据我对您的问题的理解,您试图将String个变量而不是java.nio.Path个变量传递给Files.move()

以下方式有效:

import java.io.File
import java.nio.file.{Files, Path, StandardCopyOption}

val d1 = new File("/abcd").toPath
val d2 = new File("/efgh").toPath

Files.move(d1, d2, StandardCopyOption.ATOMIC_MOVE)

但是我在您的代码中看到了另外一个问题。 StandardCopyOption.REPLACE_EXISTINGStandardCopyOption.ATOMIC_MOVE都应该可以工作,但是你不能将父目录直接移动到它的子目录中。

$ mv public/ public/images
mv: cannot move ‘public/’ to a subdirectory of itself, ‘public/images’

相反,您可能想要移动public - > tmp - > public/images

答案 1 :(得分:1)

请从我的Github中引用以下Scala代码:https://github.com/saghircse/SelfStudyNote/blob/master/Scala/MoveRenameFiles.scala

您需要在主要功能中指定您的源文件夹和目标文件夹:

    val src_path = "<SOURCE FOLDER>" // Give your source directory
    val tgt_path = "<TARGET FOLDER>" // Give your target directory

它也重命名文件。如果您不想重命名文件,请按照以下步骤进行更新:

val FileList=getListOfFiles(src_path)
FileList.foreach{f => 
  val src_file = f.toString()

  //val tgt_file = tgt_path + "/" + getFileNameWithTS(f.getName) // If you want to rename files in target
  val tgt_file = tgt_path + "/" + f.getName // If you do not want to rename files in target

  copyRenameFile(src_file,tgt_file)
  //moveRenameFile(src_file,tgt_file) - Try this if you want to delete source file
  println("File Copied : " + tgt_file)
}

答案 2 :(得分:0)

os-lib使将文件从一个目录复制到另一个目录变得很容易:

os.list(os.pwd/"public").map(os.move.into(_, os.pwd/"pub2"))

通常很难使用java.io和java.nio库(尽管对于此特定操作而言并不难看)。最好依靠os-lib进行文件系统操作。

os.move.into带有两个参数:正在移动的文件和目标目录。

此代码灵活且易于修改。您可以轻松地对其进行更新,以仅移动具有特定文件扩展名的文件。

有关如何使用os-lib的更多信息,请参见here