使用 better.files 在与另一个文件相同的目录中创建新文件的推荐习惯用法是什么?

What is the recommended idiom for creating a new file in the same directory as another with better.files?

我很喜欢我的 Scala 脚本中的“better.files”库,其中一项常见操作(对我而言)是在与现有文件相同的目录中创建一个新文件。我的第一次尝试被证明是相当冗长和丑陋的,所以我想知道是否有更好的成语。

具体来说,这是一个 bash 脚本,相当于我想在 scala 中执行的操作:

#!/bin/bash
SRC="$HOME/Downloads/some-file.txt"
SRCDIR=$(dirname "$SRC")
DST="$SRCDIR/another-file.txt"
echo "hello!" > "$DST"

为了使用 better.files 库完成同样的事情,这是我目前所拥有的:

#!/usr/bin/env scalaRunner

import better.files._
import better.files.Dsl._
import java.io.{File => JFile}

val SRC = File.home/"Downloads"/"some-file.txt"
val SRCDIR = SRC.parent
val DST = new JFile(SRCDIR.toJava,"another-file.txt").toScala
DST.overwrite("hello!\n")

它几乎与 bash 脚本一样简洁易读,但如果可以隐藏与 java.io.File 之间的转换就更好了。当然,我总是可以创建隐式转换器来做到这一点,但也许有更好的选择。

尽管显式转换没有任何问题,但如果已经有一种不那么冗长的等效方法,我主要是想避免这样做。

对于任何想要试验的人来说,假设 $SRC 文件已经存在等,以上两个脚本都应该可以按原样执行。可以在此处找到有效的“scalaRunner”脚本:

它假定 better-files jar 位于您的类路径中,如链接答案中所述。

这个怎么样:

val src = File.home/"Downloads"/"betterfiles" / "document.jpg"
val srcDir = src.parent
val dst: File = srcDir.createChild("another-file.txt")
dst.overwrite("hello!\n")