Scala script pour copier des fichiers
Je veux copier le fichier a.txt pour newDir/à partir de l'intérieur d'un script scala.
En java, ce serait fait par la création de 2 flux de fichiers pour les 2 fichiers, la lecture de la mémoire tampon de a.txt et de l'écrire à la FileOutputStream du nouveau fichier.
Est-il une meilleure façon de réaliser cet objectif dans le scala? Peut-être quelque chose à scala.outils.nsc.io._. J'ai cherché partout mais impossible de trouver beaucoup.
Vous devez vous connecter pour publier un commentaire.
Pour des raisons de performances, il est préférable d'utiliser java.nio.Canal effectuer la copie.
Liste des copie.scala:
Pour essayer de créer un fichier appelé test.txt avec le contenu suivant:
Après la création de test.txt, exécutez la commande suivante à partir de la ligne de commande:
Vérifier que test-copy.txt a
Hello World
que son contenu.dest.createNewFile
comme le FileInputStream échouera si dest n'existe pas. Aussi, vous pouvez avoir besoindest.getCanonicalFile.getParentFile.mkdirs
pour créer tous les répertoires parents de la destination du fichier.Pourquoi ne pas utiliser Apache Commons IO et FileUtils.copyFile() en particulier ? Notez que FileUtils a un grand nombre de méthodes pour copier des fichiers/répertoires etc.
Java 7 est, et maintenant vous avez une autre option:
java.nio.file.Files.copy
. Le probablement la solution la plus simple (Et avec Scalas supérieureimport
encore plus facile). À condition quefrom
etto
sont des chaînes de caractères comme dans votre question:De sûr, vous devriez commencer à utiliser
java.nio.file.Paths
au lieu de chaînes de caractères.Si vous voulez vraiment le faire vous-même au lieu d'utiliser une bibliothèque comme commons-io, vous pouvez effectuer les opérations suivantes dans la version 2.8. Créer une méthode d'aide à "l'utilisation". Il vous donnera un formulaire automatique de gestion des ressources.
Ensuite, vous pouvez définir une méthode de copie comme ceci:
Noter que la taille de la mémoire tampon (ici: 1024) pourraient avoir besoin de quelques réglages.
Location de sbt.IO. C'est de la pure scala, il vous permet de copier uniquement les fichiers modifiés, est utile des routines comme
copyDirectory
,delete
,listFiles
etc . Vous pouvez l'utiliser comme suit:Remarque vous devez ajouter un bon de dépendance:
libraryDependencies += "org.scala-sbt" % "io" % "0.13.0"
MODIFIER:
En fait, ce n'est pas une bonne approche, puisque la dépendance
"org.scala-sbt" % "io" % "version"
a été compilé à l'aide de particulier scala version et pour l'instant vous ne pouvez pas l'utiliser avec la version 2.10.X scala version. Mais peut-être que dans l'avenir, vous pouvez ajouter double %% en vous de dépendance comme"org.scala-sbt" %% "io" % "version"
et il fonctionne...Si vous ne vous inquiétez pas trop à propos de la vitesse, vous pouvez faire de votre vie un peu plus facile en lisant le fichier à l'aide de la scala.io.Source (cette mise en œuvre est pour 2.7.7):
Mais la Source de toutes les difficultés de l'analyse du fichier ligne par ligne, puis vous écrire de nouveau, sans même le traitement de l'lignes. À l'aide de l'octet de lecture/écriture Java style sera beaucoup plus rapide (environ 2-3x dernière fois que j'ai comparé ça).
Edit: 2.8 mange des retours à la ligne, donc vous devez les ajouter dans l'écriture.
()
après getLines dans la 2.8.Si vous ne voulez pas utiliser quoi que ce soit externe, il suffit de faire comme vous l'auriez fait en Java. La bonne chose est que vous pouvez.
Scalax a scalax.io.FileExtras.copyTo(dest : Fichier). Mais le développement semble s'être arrêté.
De scala-io de la documentation: