How to move file/files from one folder to another in Scala

后端 未结 3 924
野的像风
野的像风 2021-01-21 02:54

I am new to Scala.

I\'ve Googled a lot on how to move files in Scala, but have only found how to move files in Java. I tried to move files using Java import Java.io

相关标签:
3条回答
  • 2021-01-21 03:48

    From my understanding of your question,
    you are trying to pass String variables instead of java.nio.Path variables to the Files.move().

    The below way works:

    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)
    

    However I see one more issue in your code. Both StandardCopyOption.REPLACE_EXISTING and StandardCopyOption.ATOMIC_MOVE should work but, you can't move a parent directory directly into it's child directory.

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

    Instead you might want to move public -> tmp -> public/images

    0 讨论(0)
  • 2021-01-21 03:48

    os-lib makes it easy to copy files from one directory to another:

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

    The java.io and java.nio libraries are generally difficult to work with (although not that ugly for this particular operation). It's best to rely on os-lib for filesystem operations.

    os.move.into takes two arguments: the file that's being moved and the destination directory.

    This code is flexible and easily modifiable. You could easily update it to only move files with a certain file extension.

    See here for more info on how to use os-lib.

    0 讨论(0)
  • 2021-01-21 03:52

    Refer the below Scala code from my Github : https://github.com/saghircse/SelfStudyNote/blob/master/Scala/MoveRenameFiles.scala

    You need to specify your source and target folder in main function:

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

    It also rename files. If you do not want to rename files, then update as below:

    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)
    }
    
    0 讨论(0)
提交回复
热议问题